q ...
1、啟動瀏覽器
1 Intent intent = new Intent(); 2 intent.setAction(Intent.ACTION_WEB_SEARCH); 3 //可以傳一個搜索關鍵字,會直接顯示搜索結果頁面。key是預定義的常量 4 // intent.putExtra(SearchManager.QUERY,"要搜索的內容"); 5 startActivity(intent);
Intent.ACTION_WEB_SEARCH 匹配的動作是網頁/瀏覽器
如果是這樣的Intent:
1 Intent intent = new Intent(); 2 3 intent.setAction(Intent.ACTION_WEB_SEARCH);
也可以寫成這樣:
1 2 Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
2、啟動瀏覽器,轉到指定頁面
1 //網址必須寫全,不能省略協議http 2 Uri uri =Uri.parse("http://www.baidu.com"); 3 //必須要傳一個URI,才可以啟動瀏覽器 4 Intent intent = new Intent(Intent.ACTION_VIEW,uri); 5 startActivity(intent);
Intent.ACTION_VIEW匹配的動作很多,是一個大類,包含了各種功能,必須要傳參數,系統根據這些具體的參數才能判斷要啟動的程式(類型)。
3、啟動撥號程式
1 Intent intent = new Intent(); 2 intent.setAction(Intent.ACTION_DIAL); 3 startActivity(intent);
ACTION_DIAL 匹配撥號程式。可以自動填寫要撥的號碼:
1 //手機號 2 Uri uri =Uri.parse("tel:137....."); 3 Intent intent = new Intent(Intent.ACTION_DIAL,uri); 4 startActivity(intent);
Uri參數可以寫在Intent的構造函數里,也可以setData()單獨寫:
1 Intent intent = new Intent(Intent.ACTION_DIAL); 2 //傳一個Uri類型的參數 3 intent.setData(Uri.parse("tel:137.....")); //參數為Uri類型 4 startActivity(intent);
如果是putExtra,只能單獨寫:
1 intent.putExtra(String key,String value);
4、發簡訊
方式一:
1 Intent intent = new Intent(Intent.ACTION_VIEW); 2 //可以設置簡訊的預設內容。可選 3 intent.putExtra("sms_body", "簡訊內容"); 4 //具體細分VIEW的action為發簡訊 5 intent.setType("vnd.android-dir/mms-sms"); 6 startActivity(intent);
此方式不能設置預設收件人
方式二:
1 //預設收件人 2 Uri uri =Uri.parse("smsto:137782323"); 3 Intent it = new Intent(Intent.ACTION_SENDTO, uri); 4 it.putExtra("sms_body", "預設的簡訊內容"); 5 startActivity(it);
5、發郵件
1 //預設收件人 2 Uri uri =Uri.parse("mailto:[email protected]"); 3 Intent intent = new Intent(Intent.ACTION_SENDTO, uri); 4 startActivity(intent);
註意:如果手機上沒有對應的該類應用,又沒有寫對應的處理代碼,會閃退。比如發送郵件,但沒有安裝郵箱,會閃退。
應該先檢查手機上是否已安裝該類應用,如果沒有,給出提示,或者打開瀏覽器,轉到該類常用應用的下載頁面。
6、播放多媒體
1 Intent intent = new Intent(Intent.ACTION_VIEW); 2 Uri uri =Uri.parse("mnt/sdcard/1.mp3");
3 //不能預設這句代碼
4 intent.setDataAndType(uri,"audio/mp3");
5 startActivity(intent);
7、安裝apk
1 Intent intent = new Intent(Intent.ACTION_VIEW); 2 //apk路徑 3 Uri uri=Uri.parse("mnt/sdcard/qqmail.apk");
4 //參數:Uri類型的apk路徑,String類型的數據類型(固定寫法)
5 intent.setDataAndType(uri,"application/vnd.android.package-archive");
6 startActivity(intent);
8、卸載apk
更新軟體時,有時需要先卸載原來的版本,再下載安裝新版本。
9、從相冊選取圖片
1 Intent intent = new Intent(); 2 //所有圖片格式 3 intent.setType("image/*"); 4 intent.setAction(Intent.ACTION_GET_CONTENT); 5 //要設置請求碼 6 startActivityForResult(intent, 1);
10、選擇某類應用
1 Intent intent = new Intent(Intent.ACTION_SEND); 2 intent.setType("text/plain"); 3 intent.putExtra(Intent.EXTRA_TITLE, "標題信息"); 4 intent.putExtra(Intent.EXTRA_SUBJECT, "主題信息"); 5 intent.putExtra(Intent.EXTRA_TEXT, "內容信息"); 6 startActivity(intent);
會彈出對話框列出所有滿足該action的的應用,點擊某項會打開該應用。預定義的action值分類很亂,所以往往會列出很多項,其中一些我們並不想要。
有時候我們並不想全部列出,只想列出其中部分,可以這樣:
1 Intent it = new Intent(Intent.ACTION_SEND); 2 it.setType("text/plain"); 3 /* 4 首先我們通過getPackageManager()獲取包管理器PackageManager對象。PackageManger的主要職責是管理應用程式包。 5 通過PackageManager,我們就可以獲取應用程式信息,PackageManager獲取的信息即來自AndroidManifest.XML。 6 PageManager對象有個queryIntentActivities()方法,用來根據Intent查詢可用的activity信息,該方法返回ResolveInfo集合。 7 */ 8 List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(it, 0); 9 if (!resInfo.isEmpty()){ 10 List<Intent> targetedShareIntents = new ArrayList<Intent>(); 11 /* 12 針對每個ResolveInfo對象,通過activityInfo屬性獲取ActivityInfo對象, 13 根據ActivityInfo的packageName獲取所屬的包名稱,並判斷名稱是否包含email、bluetooth、mms、weibo,如果包含,則添加到備選集合中。 14 */ 15 for (ResolveInfo info : resInfo) { 16 ActivityInfo activityInfo = info.activityInfo; 17 if (activityInfo.packageName.contains("email") || activityInfo.packageName.contains("bluetooth") 18 || activityInfo.packageName.contains("mms") || activityInfo.packageName.contains("weibo")) { 19 Intent targeted = new Intent(Intent.ACTION_SEND); 20 targeted.setType("text/plain"); 21 targeted.putExtra(Intent.EXTRA_TITLE, "title"); 22 targeted.putExtra(Intent.EXTRA_SUBJECT, "subject"); 23 targeted.putExtra(Intent.EXTRA_TEXT, "content"); 24 targeted.setPackage(activityInfo.packageName); 25 targetedShareIntents.add(targeted); 26 } 27 } 28 //然後調用ceateChooser創建一個ACTION_CHOOSER Intent,用第一個備選Intent作為target Intent(第一個參數) 29 Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "選擇分享到:"); 30 //通過putExtra設置Intent.EXTRA_INITIAL_INTENTS為其他備選Intent 31 chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[] {})); 32 startActivity(chooserIntent); 33 }
只會列出我們想要列出的項。通常用這種方式。
下一篇隨筆寫 分享功能的實現。
12、打開照相機
1 Intent intent = new Intent("android.media.action.STILL_IMAGE_CAMERA"); 2 startActivity(intent);
13、打開錄音機
1 Intent mi = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); 2 startActivity(mi);