- Intent的中文意思是“意圖,目的”的意思,可以理解爲不同組件之間通信的“媒介”或者“信使”。
- 目標組件一般要通過Intent來聲明自己的條件,一般通過組件中的<intent-filter>元素來過濾。
- Intent在由以下幾個部分組成:動作(action),數據(data),分類(Category),類型(Type),組件(Component),和擴展信息(Extra)。
- Intent在尋找目標組件的時候有兩種方法:第一,通過組件名稱直接指定;第二,通過Intent Filter過濾指定
- Intent啓動不同組件的方法
- 組件名稱 方法名稱
- Activity startActivity() startActivityForResult()
- Service startService() bindService()
- Broadcasts sendBroadcast() sendOrderedBroadcast() sendStickyBroadcast()
- 常見的Activity Action Intent常量
- 常量名稱 常量值 意義
- ACTION_MAIN android.intent.action.MAIN 應用程序入口
- ACTION_VIEW android.intent.action.VIEW 顯示數據給用戶
- ACTION_ATTACH_DATA android.intent.action.ATTACH_DATA 指明附加信息給其他地方的一些數據
- ACTION_EDIT android.intent.action.EDIT 顯示可編輯的數據
- ACTION_PICK android.intent.action.PICK 選擇數據
- ACTION_CHOOSER android.intent.action.CHOOSER 顯示一個Activity選擇器
- ACTION_GET_CONTENT android.intent.action.GET_CONTENT 獲得內容
- ACTION_DIAL android.intent.action.GET_CONTENT 顯示打電話面板
- ACITON_CALL android.intent.action.DIAL 直接打電話
- ACTION_SEND android.intent.action.SEND 直接發短信
- ACTION_SENDTO android.intent.action.SENDTO 選擇發短信
- ACTION_ANSWER android.intent.action.ANSWER 應答電話
- ACTION_INSERT android.intent.action.INSERT 插入數據
- ACTION_DELETE android.intent.action.DELETE 刪除數據
- ACTION_RUN android.intent.action.RUN 運行數據
- ACTION_SYNC android.intent.action.SYNC 同步數據
- ACTION_PICK_ACTIVITY android.intent.action.PICK_ACTIVITY 選擇Activity
- ACTION_SEARCH android.intent.action.SEARCH 搜索
- ACTION_WEB_SEARCH android.intent.action.WEB_SEARCH Web搜索
- ACTION_FACTORY_TEST android.intent.action.FACTORY_TEST 工廠測試入口點
- 常見的BroadcastIntent Action常量 BroadcastIntent
- Action字符串常量 描述
- ACTION_TIME_TICK 系統時間每過一分鐘發出的廣播
- ACTION_TIME_CHANGED 系統時間通過設置發生了變化
- ACTION_TIMEZONE_CHANGED 時區改變
- ACTION_BOOT_COMPLETED 系統啓動完畢
- ACTION_PACKAGE_ADDED 新的應用程序apk包安裝完畢
- ACTION_PACKAGE_CHANGED 現有應用程序apk包改變
- ACTION_PACKAGE_REMOVED 現有應用程序apk包被刪除
- ACTION_UID_REMOVED 用戶id被刪除
- Intent的Action和Data屬性匹配
- Action屬性 Data屬性 說明
- ACTION_VIEW content://contacts/people/1 顯示id爲1的聯繫人信息
- ACTION_DIAL content://contacts/people/1 將id爲1的聯繫人電話號碼顯示在撥號界面中
- ACITON_VIEW tel:123 顯示電話爲123的聯繫人信息
- ACTION_VIEW http://www.google.com 在瀏覽器中瀏覽該網站
- ACTION_VIEW file://sdcard/mymusic.mp3 播放MP3
- ACTION_VIEW geo:39.2456,116.3523 顯示地圖
- 常見的Category常量
- Category字符串常量 描述
- CATEGORY_BROWSABLE 目標Activity能通過在網頁瀏覽器中點擊鏈接而激活(比如,點擊瀏覽器中的圖片鏈接)
- CATEGORY_GADGET 表示目標Activity可以被內嵌到其他Activity當中
- CATEGORY_HOME 目標Activity是HOME Activity,即手機開機啓動後顯示的Activity,或按下HOME鍵後顯示的Activity
- CATEGORY_LAUNCHER 表示目標Activity是應用程序中最優先被執行的Activity
- CATEGORY_PREFERENCE 表示目標Activity是一個偏愛設置的Activity
- 常見的Extra常量
- Extra鍵值字符串常量 描述
- EXTRA_BCC 裝有郵件密送地址的字符串數組
- EXTRA_CC 裝有郵件抄送地址的字符串數組
- EXTRA_EMAIL 裝有郵件發送地址的字符串數組
- EXTRA_INTENT 使用ACTION_PICK_ACTIVITY動作時裝有Intent選項的鍵
- EXTRA_KEY_EVENT 觸發該Intent的案件的KeyEvent對象
- EXTRA_PHONE_NUMBER 使用撥打電話相關的Action時,電話號碼字符串的鍵,類型爲String
- EXTRA_SHORTCUT_ICON 使用ACTION_CREATE_SHORTCUT在HomeActivity創建快捷方式時,對快捷方式的描述信息。
- 其中ICON和ICON_RESOURCE描述的是快捷方式的圖標,類型分別爲Bitmap和ShortcutIconResource。INTENT描述的是快捷方式相對應的Intent對象。NAME描述的是快捷方式的名字。
- EXTRA_SHORTCUT_ICON_RESOURCE EXTRA_SHORTCUT_INTENT EXTRA_SHORTCUT_NAME EXTRA_SUBJECT 描述信息主題的鍵
- EXTRA_TEXT 使用ACTION_SEND動作時,用來描述要發送的文本信息,類型爲CharSequence
- EXTRA_TITLE 使用ACTION_CHOOSER動作時,描述對話框標題的鍵,類型爲CharSequence
- EXTRA_UID 使用ACTION_UID_REMOVED動作時,描述刪除的用戶id的鍵,類型爲int
- Android.telephony包中的類
- 類名 描述
- CellLocation 表示設備位置的抽象類
- PhoneNumberFormattingTextWather 監視一個TextView控件,如果有電話號碼輸入,則用formatNumber()方法處理電話號碼
- PhoneNumberUtils 包含各種處理電話號碼字符串的使用工具
- PhoneStateListener 監視手機中電話狀態變化的監聽類
- ServiceState 包含電話狀態和相關的服務信息
- TelephonyManager 提供對手機中電話服務信息的訪問
- 與短信服務相關的類主要在包android.telephony.gsm中
- 類名 描述
- GsmCellLocation 表示GSM手機的基站位置
- SmsManager 管理各種短信操作
- SmsMessage 表示具體的短信
- 1.Intent的用法:
- (1)用Action跳轉
- 1、使用Action跳轉,如果有一個程序的AndroidManifest.xml中的某一個 Activity的IntentFilter段中 定義了包含了相同的Action那麼這個Intent就與這個目標Action匹配。如果這個IntentFilter段中沒有定義 Type,Category,那麼這個 Activity就匹配了。但是如果手機中有兩個以上的程序匹配,那麼就會彈出一個對話可框來提示說明。
- Action 的值在Android中有很多預定義,如果你想直接轉到你自己定義的Intent接收者,你可以在接收者的IntentFilter 中加入一個自定義的Action值(同時要設定 Category值爲"android.intent.category.DEFAULT"),在你的Intent中設定該值爲Intent的 Action,就直接能跳轉到你自己的Intent接收者中。因爲這個Action在系統中是唯一的。
- 2,data/type,你可以用Uri 來做爲data,比如Uri uri = Uri.parse(http://www.google.com);
- Intent i = new Intent(Intent.ACTION_VIEW,uri);手機的Intent分發過程中,會根據http://www.google.com 的scheme判斷出數據類型type 。手機的Brower則能匹配它,在Brower的Manifest.xml中的IntenFilter中 首先有ACTION_VIEW Action,也能處理http:的type,
- 3, 至於分類Category,一般不要去在Intent中設置它,如果你寫Intent的接收者,就在Manifest.xml的Activity的 IntentFilter中包含android.category.DEFAULT,這樣所有不設置 Category(Intent.addCategory(String c);)的Intent都會與這個Category匹配。
- 4,extras(附 加信息),是其它所有附加信息的集合。使用extras可以爲組件提供擴展信息,比如,如果要執行“發送電子郵件”這個動 作,可以將電子郵件的標題、正文等保存在extras裏,傳給電子郵件發送組件。
- (2)用類名跳轉
- Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描 述,Android則根據此Intent的描述, 負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。Intent在這裏起着實現調用者與被調用者之間的解耦作用。Intent傳遞過程中,要找 到目標消費者(另一個Activity,IntentReceiver或Service),也就是Intent的響 應者。
- Intent intent = new Intent();
- intent.setClass(context, targetActivy.class);
- //或者直接用 Intent intent = new Intent(context, targetActivity.class);
- startActivity(intent);
- 不過注意用類名跳轉,需要在AndroidManifest.xml中申明activity
- <activity android:name="targetActivity"></activity>
- 2.幾種Intent的用法
- android 中intent是經常要用到的。不管是頁面牽轉,還是傳遞數據,或是調用外部程序,系統功能都要用到intent。在做了一些intent的例子之後,整理了一下intent,希望對大家有用。由於intent內容太多,不可能真的寫全,難免會有遺落,以後我會隨時更新。如果你們有疑問或新的intent內容,希望交流。
- ★intent大全:
- 1.從google搜索內容
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_WEB_SEARCH);
- intent.putExtra(SearchManager.QUERY,"searchString")
- startActivity(intent);
- 2.瀏覽網頁
- Uri uri = Uri.parse("http://www.google.com");
- Intent it = new Intent(Intent.ACTION_VIEW,uri);
- startActivity(it);
- 3.顯示地圖
- Uri uri = Uri.parse("geo:38.899533,-77.036476");
- Intent it = new Intent(Intent.Action_VIEW,uri);
- startActivity(it);
- 4.路徑規劃
- Uri uri = Uri.parse("http://maps.google.com/maps?f=dsaddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
- Intent it = new Intent(Intent.ACTION_VIEW,URI);
- startActivity(it);
- 5.撥打電話
- Uri uri = Uri.parse("tel:xxxxxx");
- Intent it = new Intent(Intent.ACTION_DIAL, uri);
- startActivity(it);
- 6.調用發短信的程序
- Intent it = new Intent(Intent.ACTION_VIEW);
- it.putExtra("sms_body", "The SMS text");
- it.setType("vnd.android-dir/mms-sms");
- startActivity(it);
- 7.發送短信
- Uri uri = Uri.parse("smsto:0800000123");
- Intent it = new Intent(Intent.ACTION_SENDTO, uri);
- it.putExtra("sms_body", "The SMS text");
- startActivity(it);
- String body="this is sms demo";
- Intent mmsintent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", number, null));
- mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
- mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, true);
- mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, true);
- startActivity(mmsintent);
- 8.發送彩信
- Uri uri = Uri.parse("content://media/external/images/media/23");
- Intent it = new Intent(Intent.ACTION_SEND);
- it.putExtra("sms_body", "some text");
- it.putExtra(Intent.EXTRA_STREAM, uri);
- it.setType("image/png");
- startActivity(it);
- StringBuilder sb = new StringBuilder();
- sb.append("file://");
- sb.append(fd.getAbsoluteFile());
- Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mmsto", number, null));
- // Below extra datas are all optional.
- intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT, subject);
- intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
- intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI, sb.toString());
- intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, composeMode);
- intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, exitOnSent);
- startActivity(intent);
- 9.發送Email
- Uri uri = Uri.parse("mailto:[email protected]");
- Intent it = new Intent(Intent.ACTION_SENDTO, uri);
- startActivity(it);
- Intent it = new Intent(Intent.ACTION_SEND);
- it.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
- it.putExtra(Intent.EXTRA_TEXT, "The email body text");
- it.setType("text/plain");
- startActivity(Intent.createChooser(it, "Choose Email Client"));
- Intent it=new Intent(Intent.ACTION_SEND);
- String[] tos={"[email protected]"};
- String[] ccs={"[email protected]"};
- it.putExtra(Intent.EXTRA_EMAIL, tos);
- it.putExtra(Intent.EXTRA_CC, ccs);
- it.putExtra(Intent.EXTRA_TEXT, "The email body text");
- it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
- it.setType("message/rfc822");
- startActivity(Intent.createChooser(it, "Choose Email Client"));
- Intent it = new Intent(Intent.ACTION_SEND);
- it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
- it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
- sendIntent.setType("audio/mp3");
- startActivity(Intent.createChooser(it, "Choose Email Client"));
- 10.播放多媒體
- Intent it = new Intent(Intent.ACTION_VIEW);
- Uri uri = Uri.parse("file:///sdcard/song.mp3");
- it.setDataAndType(uri, "audio/mp3");
- startActivity(it);
- Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
- Intent it = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(it);
- 11.uninstall apk
- Uri uri = Uri.fromParts("package", strPackageName, null);
- Intent it = new Intent(Intent.ACTION_DELETE, uri);
- startActivity(it);
- 12.install apk
- Uri installUri = Uri.fromParts("package", "xxx", null);
- returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
- 13. 打開照相機
- <1>Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);
- this.sendBroadcast(i);
- <2>long dateTaken = System.currentTimeMillis();
- String name = createName(dateTaken) + ".jpg";
- fileName = folder + name;
- ContentValues values = new ContentValues();
- values.put(Images.Media.TITLE, fileName);
- values.put("_data", fileName);
- values.put(Images.Media.PICASA_ID, fileName);
- values.put(Images.Media.DISPLAY_NAME, fileName);
- values.put(Images.Media.DESCRIPTION, fileName);
- values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);
- Uri photoUri = getContentResolver().insert(
- MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
- Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
- startActivityForResult(inttPhoto, 10);
- 14.從gallery選取圖片
- Intent i = new Intent();
- i.setType("image/*");
- i.setAction(Intent.ACTION_GET_CONTENT);
- startActivityForResult(i, 11);
- 15. 打開錄音機
- Intent mi = new Intent(Media.RECORD_SOUND_ACTION);
- startActivity(mi);
- 16.顯示應用詳細列表
- Uri uri = Uri.parse("market://details?id=app_id");
- Intent it = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(it);
- //where app_id is the application ID, find the ID
- //by clicking on your application on Market home
- //page, and notice the ID from the address bar
- 剛纔找app id未果,結果發現用package name也可以
- Uri uri = Uri.parse("market://details?id=<packagename>");
- 這個簡單多了
- 17尋找應用
- Uri uri = Uri.parse("market://search?q=pname:pkg_name");
- Intent it = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(it);
- //where pkg_name is the full package path for an application
- 18打開聯繫人列表
- <1>
- Intent i = new Intent();
- i.setAction(Intent.ACTION_GET_CONTENT);
- i.setType("vnd.android.cursor.item/phone");
- startActivityForResult(i, REQUEST_TEXT);
- <2>
- Uri uri = Uri.parse("content://contacts/people");
- Intent it = new Intent(Intent.ACTION_PICK, uri);
- startActivityForResult(it, REQUEST_TEXT);
- 19 打開另一程序
- Intent i = new Intent();
- ComponentName cn = new ComponentName("com.yellowbook.android2",
- "com.yellowbook.android2.AndroidSearch");
- i.setComponent(cn);
- i.setAction("android.intent.action.MAIN");
- startActivityForResult(i, RESULT_OK);
- 20.調用系統編輯添加聯繫人(高版本SDK有效):
- Intent it = newIntent(Intent.ACTION_INSERT_OR_EDIT);
- it.setType("vnd.android.cursor.item/contact");
- //it.setType(Contacts.CONTENT_ITEM_TYPE);
- it.putExtra("name","myName");
- it.putExtra(android.provider.Contacts.Intents.Insert.COMPANY, "organization");
- it.putExtra(android.provider.Contacts.Intents.Insert.EMAIL,"email");
- it.putExtra(android.provider.Contacts.Intents.Insert.PHONE,"homePhone");
- it.putExtra(android.provider.Contacts.Intents.Insert.SECONDARY_PHONE,
- "mobilePhone");
- it.putExtra( android.provider.Contacts.Intents.Insert.TERTIARY_PHONE,
- "workPhone");
- it.putExtra(android.provider.Contacts.Intents.Insert.JOB_TITLE,"title");
- startActivity(it);
- 21.調用系統編輯添加聯繫人(全有效):
- Intent intent = newIntent(Intent.ACTION_INSERT_OR_EDIT);
- intent.setType(People.CONTENT_ITEM_TYPE);
- intent.putExtra(Contacts.Intents.Insert.NAME, "My Name");
- intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");
- intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,Contacts.PhonesColumns.TYPE_MOBILE);
- intent.putExtra(Contacts.Intents.Insert.EMAIL, "[email protected]");
- intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE, Contacts.ContactMethodsColumns.TYPE_WORK);
- startActivity(intent);
Intent,Action,大全
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.