同时发起多个intent

4 篇文章 0 订阅
2 篇文章 0 订阅
做设置头像时有这么一种需求,当点击一个按钮时,需要让用户选择是拍照获取照片,还是在图库中选择获取照片。

要满足上述需求,有两种解决方案,一种是创建一个选择dialog,这个会比较保险,可以自己定义dialog的样式,也可以很好的控制dialog里面的内容。但是会比较麻烦一点。具体代码如下。

    /**
     * 显示修改头像的对话框
     */
    private void getPhoto() {
        final String[] arrayOptions = new String[] { "拍照", "从相册中选择" };
        AlertDialog dialog = new AlertDialog.Builder(PersonInfoActivity.this)
                .setItems(arrayOptions, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                        // 当选中了拍照item时
                        case 0:
                            // 拍摄照片
                            takePhoto();
                            break;
                        // 当选中了从相册中选则item时
                        case 1:
                            // 从相册中选择照片
                            selectPhoto();
                            break;
                        }
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                }).create();
        dialog.show();
    }

代码很简单,我就不详细说明了,真有不懂的给我留言吧。

接着就是第二种方法,这种方法快捷方便,但是不好控制外观,和选择的数量。
第二中方法需要用到intent的两个函数。
Intent.createChooser()函数和chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
new Intent[] { takePhotoIntent });函数。
具体代码如下

  public void onPickBoth(View v) {
    Intent pickIntent = new Intent(Intent.ACTION_GET_CONTENT);
    pickIntent.setType("image/*");

    Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    Intent chooserIntent = Intent.createChooser(pickIntent,
        getString(R.string.activity_main_pick_both));
    //将拍照intent设置为额外初始化intent
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
        new Intent[] { takePhotoIntent });

    startActivityForResult(chooserIntent, PICK_OR_TAKE_PICTURE);
  }

和发起单个intent的一样,先创建好要发起的intent,这里面有takePhotoIntent,和pickIntent。两个,当然你可以有三个四个五个。
然后使用createChooser方法创建一个intent。createChooser里的第一个参数是默认要发起的Intent,第二个参数是弹出的选择对话框的标题。
接着使用putExtra,添加额外要发起的Intent,第一个参数是固定的,第二个参数是要额外发起的intent的新的实例。
这时候再startActivityForResult(chooserIntent, PICK_OR_TAKE_PICTURE);发起这个intent的,系统就会让你自己选择想要启动哪一个intent的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值