Android 使用预定义的action值启动系统应用
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:xxx@abc.com"); 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);