轉(zhuǎn)自:http://www.cnblogs.com/2010wuhao/p/4720012.html
intent的發(fā)送
我們必須使用intent來(lái)在同一個(gè)app的兩個(gè)activity之間進(jìn)行切換衷佃。通常是定義一個(gè)顯式(explicit)的intent,它指定了需要啟動(dòng)組件的類(lèi)名。然而蹄胰,當(dāng)想要喚起不同的app來(lái)執(zhí)行某個(gè)動(dòng)作(比如查看地圖)夕春,則必須使用隱式(implicit)的intent丈攒。
建立隱式的Intent
mplicit intents并不聲明要啟動(dòng)組件的具體類(lèi)名褥实,而是聲明一個(gè)需要執(zhí)行的action遍希。這個(gè)action指定了我們想做的事情等曼,例如查看,編輯凿蒜,發(fā)送或者是獲取一些東西禁谦。Intents通常會(huì)在發(fā)送action的同時(shí)附帶一些數(shù)據(jù),例如你想要查看的地址或者是你想要發(fā)送的郵件信息废封。數(shù)據(jù)的具體類(lèi)型取決于我們想要?jiǎng)?chuàng)建的Intent州泊,比如Uri或其他規(guī)定的數(shù)據(jù)類(lèi)型,或者甚至也可能根本不需要數(shù)據(jù)漂洋。
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
驗(yàn)證是否有App去接收這個(gè)Intent
盡管Android系統(tǒng)會(huì)確保每一個(gè)確定的intent會(huì)被系統(tǒng)內(nèi)置的app(such as the Phone, Email, or Calendar app)之一接收拥诡,但是我們還是應(yīng)該在觸發(fā)一個(gè)intent之前做驗(yàn)證是否有App接受這個(gè)intent的步驟。
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;
使用intent啟動(dòng)activity
當(dāng)創(chuàng)建好了intent并且設(shè)置好了extra數(shù)據(jù)后氮发,通過(guò)執(zhí)行startActivity() 將intent發(fā)送到系統(tǒng)渴肉。若系統(tǒng)確定了多個(gè)activity可以handle這個(gè)intent,它會(huì)顯示出一個(gè)dialog,讓用戶(hù)選擇啟動(dòng)哪個(gè)app爽冕。如果系統(tǒng)發(fā)現(xiàn)只有一個(gè)app可以handle這個(gè)intent仇祭,則系統(tǒng)將直接啟動(dòng)該app。
startActivity(intent);
地圖實(shí)例
// Build the intent
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
// Verify it
resolvesPackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) { startActivity(mapIntent);}
顯示分享app的選擇列表
如果用戶(hù)希望每次都彈出選擇界面颈畸,而且每次都不確定會(huì)選擇哪個(gè)app啟動(dòng)乌奇,例如分享功能,用戶(hù)選擇分享到哪個(gè)app都是不確定的眯娱,這個(gè)時(shí)候礁苗,需要強(qiáng)制彈出選擇的對(duì)話(huà)框。(這種情況下用戶(hù)不能選擇默認(rèn)啟動(dòng)的app)徙缴。
為了顯示chooser, 需要使用createChooser()來(lái)創(chuàng)建Intent
Intent intent = new Intent(Intent.ACTION_SEND);
String title = getResources().getText(R.string.chooser_title);
Intent chooser = Intent.createChooser(intent, title);
startActivity(chooser);