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); 

 

posted @ 2017-12-22 14:37  勤能补拙Android  阅读(29666)  评论(0编辑  收藏  举报