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