在Android开发过程中,我们常常需要借助手机上的其他应用来帮助我们实现一些功能,这时就需要使用隐式Intent,他的原理是设置Action、Data、Category,让系统来筛选出合适的Activity。
但如果一个功能有多个应用可以实现的话,比如选择图片的功能,可以直接从相册或手机内部存储设备中选择图片,也可以调用相机进行拍照。
1.从相册或手机内部存储设备中选择图片(如果有多个应用的activity的intent过滤规则与之匹配,则会拉起系统的chooserActivity让用户进行选择):
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivity(i);
2.调用相机进行拍照(若只有一个activity与之匹配,则直接拉起该activity)
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(i);
但这是两个不同的intent,有没有一种方法能让两个intent过滤的应用同时显示呢?答案是肯定的。
首先需要创建一个action为Intent.ACTION_CHOOSER的Intent,之后调用putExtra方法,分别传入putExtra(Intent.EXTRA_INTENT, i)和putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{i1, i2, i3......});
这时,系统就会展示所有能够匹配i,i1,i2,i3...的应用了。
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
Intent i2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
chooserIntent.putExtra(Intent.EXTRA_INTENT, i);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{i2});
startActivity(chooserIntent);