Intent 啟動方法和啟動Action大全


  1 Intent的中文意思是“意圖,目的”的意思,可以理解為不同組件之間通信的“媒介”或者“信使”。  
  2   
  3 目標組件一般要通過Intent來聲明自己的條件,一般通過組件中的<intent-filter>元素來過濾。  
  4   
  5 Intent在由以下幾個部分組成:動作(action),數據(data),分類(Category),類型(Type),組件(Component),和擴展信息(Extra)。  
  6   
  7 Intent在尋找目標組件的時候有兩種方法:第一,通過組件名稱直接指定;第二,通過Intent Filter過濾指定  
  8   
  9 Intent啟動不同組件的方法  
 10 組件名稱  方法名稱    
 11 Activity  startActivity()  startActivityForResult()    
 12 Service  startService()  bindService()    
 13 Broadcasts  sendBroadcast()  sendOrderedBroadcast()  sendStickyBroadcast()  
 14   
 15    
 16 常見的Activity Action Intent常量  
 17 常量名稱   常量值  意義  
 18 ACTION_MAIN  android.intent.action.MAIN   應用程序入口  
 19 ACTION_VIEW  android.intent.action.VIEW  顯示數據給用戶  
 20 ACTION_ATTACH_DATA  android.intent.action.ATTACH_DATA  指明附加信息給其他地方的一些數據  
 21 ACTION_EDIT  android.intent.action.EDIT  顯示可編輯的數據    
 22 ACTION_PICK  android.intent.action.PICK  選擇數據    
 23 ACTION_CHOOSER  android.intent.action.CHOOSER  顯示一個Activity選擇器    
 24 ACTION_GET_CONTENT  android.intent.action.GET_CONTENT  獲得內容    
 25 ACTION_DIAL  android.intent.action.GET_CONTENT  顯示打電話面板    
 26 ACITON_CALL  android.intent.action.DIAL  直接打電話    
 27 ACTION_SEND  android.intent.action.SEND  直接發短信    
 28 ACTION_SENDTO  android.intent.action.SENDTO  選擇發短信    
 29 ACTION_ANSWER  android.intent.action.ANSWER  應答電話    
 30 ACTION_INSERT  android.intent.action.INSERT  插入數據    
 31 ACTION_DELETE  android.intent.action.DELETE  刪除數據    
 32 ACTION_RUN  android.intent.action.RUN  運行數據    
 33 ACTION_SYNC  android.intent.action.SYNC  同步數據    
 34 ACTION_PICK_ACTIVITY  android.intent.action.PICK_ACTIVITY  選擇Activity    
 35 ACTION_SEARCH  android.intent.action.SEARCH  搜索    
 36 ACTION_WEB_SEARCH  android.intent.action.WEB_SEARCH  Web搜索    
 37 ACTION_FACTORY_TEST  android.intent.action.FACTORY_TEST  工廠測試入口點       
 38   
 39   
 40 常見的BroadcastIntent Action常量  BroadcastIntent   
 41 Action字符串常量  描述    
 42 ACTION_TIME_TICK  系統時間每過一分鍾發出的廣播    
 43 ACTION_TIME_CHANGED  系統時間通過設置發生了變化    
 44 ACTION_TIMEZONE_CHANGED  時區改變    
 45 ACTION_BOOT_COMPLETED  系統啟動完畢    
 46 ACTION_PACKAGE_ADDED  新的應用程序apk包安裝完畢    
 47 ACTION_PACKAGE_CHANGED  現有應用程序apk包改變    
 48 ACTION_PACKAGE_REMOVED  現有應用程序apk包被刪除    
 49 ACTION_UID_REMOVED  用戶id被刪除       
 50   
 51   
 52 Intent的Action和Data屬性匹配    
 53 Action屬性  Data屬性  說明    
 54 ACTION_VIEW  content://contacts/people/1  顯示id為1的聯系人信息    
 55 ACTION_DIAL  content://contacts/people/1  將id為1的聯系人電話號碼顯示在撥號界面中    
 56 ACITON_VIEW  tel:123  顯示電話為123的聯系人信息    
 57 ACTION_VIEW  http://www.google.com  在瀏覽器中瀏覽該網站    
 58 ACTION_VIEW  file://sdcard/mymusic.mp3  播放MP3    
 59 ACTION_VIEW  geo:39.2456,116.3523  顯示地圖  
 60    
 61   
 62 常見的Category常量  
 63 Category字符串常量  描述  
 64 CATEGORY_BROWSABLE  目標Activity能通過在網頁瀏覽器中點擊鏈接而激活(比如,點擊瀏覽器中的圖片鏈接)    
 65 CATEGORY_GADGET  表示目標Activity可以被內嵌到其他Activity當中    
 66 CATEGORY_HOME  目標Activity是HOME Activity,即手機開機啟動后顯示的Activity,或按下HOME鍵后顯示的Activity    
 67 CATEGORY_LAUNCHER  表示目標Activity是應用程序中最優先被執行的Activity    
 68 CATEGORY_PREFERENCE  表示目標Activity是一個偏愛設置的Activity  
 69   
 70   
 71 常見的Extra常量  
 72 Extra鍵值字符串常量  描述  
 73 EXTRA_BCC  裝有郵件密送地址的字符串數組    
 74 EXTRA_CC  裝有郵件抄送地址的字符串數組    
 75 EXTRA_EMAIL  裝有郵件發送地址的字符串數組    
 76 EXTRA_INTENT  使用ACTION_PICK_ACTIVITY動作時裝有Intent選項的鍵    
 77 EXTRA_KEY_EVENT  觸發該Intent的案件的KeyEvent對象    
 78 EXTRA_PHONE_NUMBER  使用撥打電話相關的Action時,電話號碼字符串的鍵,類型為String    
 79 EXTRA_SHORTCUT_ICON  使用ACTION_CREATE_SHORTCUT在HomeActivity創建快捷方式時,對快捷方式的描述信息。  
 80 其中ICON和ICON_RESOURCE描述的是快捷方式的圖標,類型分別為Bitmap和ShortcutIconResource。INTENT描述的是快捷方式相對應的Intent對象。NAME描述的是快捷方式的名字。    
 81 EXTRA_SHORTCUT_ICON_RESOURCE  EXTRA_SHORTCUT_INTENT  EXTRA_SHORTCUT_NAME  EXTRA_SUBJECT  描述信息主題的鍵    
 82 EXTRA_TEXT  使用ACTION_SEND動作時,用來描述要發送的文本信息,類型為CharSequence    
 83 EXTRA_TITLE  使用ACTION_CHOOSER動作時,描述對話框標題的鍵,類型為CharSequence    
 84 EXTRA_UID  使用ACTION_UID_REMOVED動作時,描述刪除的用戶id的鍵,類型為int      
 85   
 86   
 87 Android.telephony包中的類    
 88 類名  描述    
 89 CellLocation  表示設備位置的抽象類    
 90 PhoneNumberFormattingTextWather  監視一個TextView控件,如果有電話號碼輸入,則用formatNumber()方法處理電話號碼    
 91 PhoneNumberUtils  包含各種處理電話號碼字符串的使用工具    
 92 PhoneStateListener  監視手機中電話狀態變化的監聽類    
 93 ServiceState  包含電話狀態和相關的服務信息    
 94 TelephonyManager  提供對手機中電話服務信息的訪問  
 95   
 96    
 97 與短信服務相關的類主要在包android.telephony.gsm中  
 98 類名  描述  
 99 GsmCellLocation  表示GSM手機的基站位置    
100 SmsManager  管理各種短信操作    
101 SmsMessage  表示具體的短信    
102   
103   
104 1.Intent的用法:  
105 (1)用Action跳轉  
106 1、使用Action跳轉,如果有一個程序的AndroidManifest.xml中的某一個 Activity的IntentFilter段中 定義了包含了相同的Action那么這個Intent就與這個目標Action匹配。如果這個IntentFilter段中沒有定義 Type,Category,那么這個 Activity就匹配了。但是如果手機中有兩個以上的程序匹配,那么就會彈出一個對話可框來提示說明。   
107 Action 的值在Android中有很多預定義,如果你想直接轉到你自己定義的Intent接收者,你可以在接收者的IntentFilter 中加入一個自定義的Action值(同時要設定 Category值為"android.intent.category.DEFAULT"),在你的Intent中設定該值為Intent的 Action,就直接能跳轉到你自己的Intent接收者中。因為這個Action在系統中是唯一的。  
108 2,data/type,你可以用Uri 來做為data,比如Uri uri = Uri.parse(http://www.google.com);  
109 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,  
110 3, 至於分類Category,一般不要去在Intent中設置它,如果你寫Intent的接收者,就在Manifest.xml的Activity的 IntentFilter中包含android.category.DEFAULT,這樣所有不設置 Category(Intent.addCategory(String c);)的Intent都會與這個Category匹配。  
111 4,extras(附 加信息),是其它所有附加信息的集合。使用extras可以為組件提供擴展信息,比如,如果要執行“發送電子郵件”這個動 作,可以將電子郵件的標題、正文等保存在extras里,傳給電子郵件發送組件。  
112 (2)用類名跳轉  
113     Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描 述,Android則根據此Intent的描述, 負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。Intent在這里起着實現調用者與被調用者之間的解耦作用。Intent傳遞過程中,要找 到目標消費者(另一個Activity,IntentReceiver或Service),也就是Intent的響 應者。  
114 Intent intent = new Intent();  
115 intent.setClass(context, targetActivy.class);  
116 //或者直接用 Intent intent = new Intent(context, targetActivity.class);  
117   
118 startActivity(intent);  
119 不過注意用類名跳轉,需要在AndroidManifest.xml中申明activity    
120 <activity android:name="targetActivity"></activity>  
121 2.幾種Intent的用法  
122 android 中intent是經常要用到的。不管是頁面牽轉,還是傳遞數據,或是調用外部程序,系統功能都要用到intent。在做了一些intent的例子之后,整理了一下intent,希望對大家有用。由於intent內容太多,不可能真的寫全,難免會有遺落,以后我會隨時更新。如果你們有疑問或新的intent內容,希望交流。   
123 ★intent大全:   
124 1.從google搜索內容   
125 Intent intent = new Intent();   
126 intent.setAction(Intent.ACTION_WEB_SEARCH);   
127 intent.putExtra(SearchManager.QUERY,"searchString")   
128 startActivity(intent);   
129   
130 2.瀏覽網頁   
131 Uri uri = Uri.parse("http://www.google.com");   
132 Intent it  = new Intent(Intent.ACTION_VIEW,uri);   
133 startActivity(it);   
134   
135 3.顯示地圖   
136 Uri uri = Uri.parse("geo:38.899533,-77.036476");   
137 Intent it = new Intent(Intent.Action_VIEW,uri);   
138 startActivity(it);   
139   
140 4.路徑規划   
141 Uri uri = Uri.parse("http://maps.google.com/maps?f=dsaddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");   
142 Intent it = new Intent(Intent.ACTION_VIEW,URI);   
143 startActivity(it);   
144   
145 5.撥打電話   
146 Uri uri = Uri.parse("tel:xxxxxx");   
147 Intent it = new Intent(Intent.ACTION_DIAL, uri);     
148 startActivity(it);   
149   
150 6.調用發短信的程序   
151 Intent it = new Intent(Intent.ACTION_VIEW);      
152 it.putExtra("sms_body", "The SMS text");      
153 it.setType("vnd.android-dir/mms-sms");      
154 startActivity(it);   
155   
156 7.發送短信   
157 Uri uri = Uri.parse("smsto:0800000123");      
158 Intent it = new Intent(Intent.ACTION_SENDTO, uri);      
159 it.putExtra("sms_body", "The SMS text");      
160 startActivity(it);   
161 String body="this is sms demo";   
162 Intent mmsintent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", number, null));   
163 mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);   
164 mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, true);   
165 mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, true);   
166 startActivity(mmsintent);   
167   
168 8.發送彩信   
169 Uri uri = Uri.parse("content://media/external/images/media/23");      
170 Intent it = new Intent(Intent.ACTION_SEND);      
171 it.putExtra("sms_body", "some text");      
172 it.putExtra(Intent.EXTRA_STREAM, uri);      
173 it.setType("image/png");      
174 startActivity(it);   
175 StringBuilder sb = new StringBuilder();   
176 sb.append("file://");   
177 sb.append(fd.getAbsoluteFile());   
178 Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mmsto", number, null));   
179 // Below extra datas are all optional.   
180 intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT, subject);   
181 intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);   
182 intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI, sb.toString());   
183 intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, composeMode);   
184 intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, exitOnSent);   
185 startActivity(intent);   
186   
187 9.發送Email   
188 Uri uri = Uri.parse("mailto:xxx@abc.com");   
189 Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
190 startActivity(it);   
191 Intent it = new Intent(Intent.ACTION_SEND);      
192 it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");      
193 it.putExtra(Intent.EXTRA_TEXT, "The email body text");      
194 it.setType("text/plain");      
195 startActivity(Intent.createChooser(it, "Choose Email Client"));   
196 Intent it=new Intent(Intent.ACTION_SEND);        
197 String[] tos={"me@abc.com"};        
198 String[] ccs={"you@abc.com"};        
199 it.putExtra(Intent.EXTRA_EMAIL, tos);        
200 it.putExtra(Intent.EXTRA_CC, ccs);        
201 it.putExtra(Intent.EXTRA_TEXT, "The email body text");        
202 it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");        
203 it.setType("message/rfc822");        
204 startActivity(Intent.createChooser(it, "Choose Email Client"));      
205   
206 Intent it = new Intent(Intent.ACTION_SEND);      
207 it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");      
208 it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");      
209 sendIntent.setType("audio/mp3");      
210 startActivity(Intent.createChooser(it, "Choose Email Client"));   
211   
212 10.播放多媒體     
213 Intent it = new Intent(Intent.ACTION_VIEW);   
214 Uri uri = Uri.parse("file:///sdcard/song.mp3");   
215 it.setDataAndType(uri, "audio/mp3");   
216 startActivity(it);   
217 Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");      
218 Intent it = new Intent(Intent.ACTION_VIEW, uri);      
219 startActivity(it);   
220   
221 11.uninstall apk   
222 Uri uri = Uri.fromParts("package", strPackageName, null);      
223 Intent it = new Intent(Intent.ACTION_DELETE, uri);      
224 startActivity(it);   
225   
226 12.install apk   
227 Uri installUri = Uri.fromParts("package", "xxx", null);   
228 returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);   
229   
230 13. 打開照相機   
231 <1>Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);   
232     this.sendBroadcast(i);   
233 <2>long dateTaken = System.currentTimeMillis();   
234     String name = createName(dateTaken) + ".jpg";   
235     fileName = folder + name;   
236     ContentValues values = new ContentValues();   
237     values.put(Images.Media.TITLE, fileName);   
238     values.put("_data", fileName);   
239     values.put(Images.Media.PICASA_ID, fileName);   
240     values.put(Images.Media.DISPLAY_NAME, fileName);   
241     values.put(Images.Media.DESCRIPTION, fileName);   
242     values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);   
243     Uri photoUri = getContentResolver().insert(   
244             MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);   
245        
246     Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);   
247     inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);   
248     startActivityForResult(inttPhoto, 10);   
249   
250 14.從gallery選取圖片   
251 Intent i = new Intent();   
252 i.setType("image/*");   
253 i.setAction(Intent.ACTION_GET_CONTENT);   
254 startActivityForResult(i, 11);   
255   
256 15. 打開錄音機   
257 Intent mi = new Intent(Media.RECORD_SOUND_ACTION);   
258 startActivity(mi);   
259   
260 16.顯示應用詳細列表         
261 Uri uri = Uri.parse("market://details?id=app_id");           
262 Intent it = new Intent(Intent.ACTION_VIEW, uri);           
263 startActivity(it);           
264 //where app_id is the application ID, find the ID            
265 //by clicking on your application on Market home            
266 //page, and notice the ID from the address bar        
267   
268 剛才找app id未果,結果發現用package name也可以   
269 Uri uri = Uri.parse("market://details?id=<packagename>");   
270 這個簡單多了   
271   
272 17尋找應用         
273 Uri uri = Uri.parse("market://search?q=pname:pkg_name");           
274 Intent it = new Intent(Intent.ACTION_VIEW, uri);           
275 startActivity(it);   
276 //where pkg_name is the full package path for an application         
277   
278 18打開聯系人列表   
279     <1>              
280     Intent i = new Intent();   
281     i.setAction(Intent.ACTION_GET_CONTENT);   
282     i.setType("vnd.android.cursor.item/phone");   
283     startActivityForResult(i, REQUEST_TEXT);   
284   
285     <2>   
286     Uri uri = Uri.parse("content://contacts/people");   
287     Intent it = new Intent(Intent.ACTION_PICK, uri);   
288     startActivityForResult(it, REQUEST_TEXT);   
289   
290 19 打開另一程序   
291 Intent i = new Intent();   
292 ComponentName cn = new ComponentName("com.yellowbook.android2",   
293         "com.yellowbook.android2.AndroidSearch");   
294 i.setComponent(cn);   
295 i.setAction("android.intent.action.MAIN");   
296 startActivityForResult(i, RESULT_OK);   
297   
298 20.調用系統編輯添加聯系人(高版本SDK有效):  
299 Intent it = newIntent(Intent.ACTION_INSERT_OR_EDIT);  
300 it.setType("vnd.android.cursor.item/contact");  
301 //it.setType(Contacts.CONTENT_ITEM_TYPE);  
302 it.putExtra("name","myName");  
303 it.putExtra(android.provider.Contacts.Intents.Insert.COMPANY,  "organization");  
304 it.putExtra(android.provider.Contacts.Intents.Insert.EMAIL,"email");  
305 it.putExtra(android.provider.Contacts.Intents.Insert.PHONE,"homePhone");  
306 it.putExtra(android.provider.Contacts.Intents.Insert.SECONDARY_PHONE,  
307                "mobilePhone");  
308 it.putExtra(  android.provider.Contacts.Intents.Insert.TERTIARY_PHONE,  
309                "workPhone");  
310 it.putExtra(android.provider.Contacts.Intents.Insert.JOB_TITLE,"title");  
311 startActivity(it);  
312    
313 21.調用系統編輯添加聯系人(全有效):  
314 Intent intent = newIntent(Intent.ACTION_INSERT_OR_EDIT);  
315 intent.setType(People.CONTENT_ITEM_TYPE);  
316 intent.putExtra(Contacts.Intents.Insert.NAME, "My Name");  
317 intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");  
318 intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,Contacts.PhonesColumns.TYPE_MOBILE);  
319 intent.putExtra(Contacts.Intents.Insert.EMAIL, "com@com.com");  
320 intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE,                    Contacts.ContactMethodsColumns.TYPE_WORK);  
321 startActivity(intent); 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM