美文网首页
使用隐式Intent自定义chooser应用选择器

使用隐式Intent自定义chooser应用选择器

作者: Drc15H | 来源:发表于2017-06-26 20:19 被阅读0次

    在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);
    
    从相册或手机存储选择图片.png

    2.调用相机进行拍照(若只有一个activity与之匹配,则直接拉起该activity)

    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivity(i);
    
    拉起相机进行拍照.png

    但这是两个不同的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);
    
    选择相册或相机拍照.png

    相关文章

      网友评论

          本文标题:使用隐式Intent自定义chooser应用选择器

          本文链接:https://www.haomeiwen.com/subject/yfvjcxtx.html