如果只有一个意图,如何防止 Intent.createChooser 自动使用 Intent?

Posted

技术标签:

【中文标题】如果只有一个意图,如何防止 Intent.createChooser 自动使用 Intent?【英文标题】:How do I prevent Intent.createChooser from using the Intent automatically if there is only one intent? 【发布时间】:2020-01-01 15:53:31 【问题描述】:

我正在尝试创建一个意图选择器来编辑“个人资料图片”,具有以下选项: 1. 相机 2.画廊 3. 删除图片

根据用户提供的权限,我将 cameraIntent 和 galleryIntent 添加到我添加到选择器的意图列表中。 但是,如果用户同时拒绝相机和图库权限,选择器会自动退回到选项 3,删除图像,这不是我想要的。

    public Intent getImageChooserIntent()
            Intent galleryIntent = getGalleryIntent();
            Intent cameraIntent = getCameraIntent();
            Intent imageSourceChooser = Intent.createChooser(new Intent(), "Select Source");
            List<Intent> intentList = new ArrayList<>();
            if (galleryIntent != null) 
                intentList.add(galleryIntent);
            
            if (cameraIntent != null) 
                intentList.add(cameraIntent);
            

            intentList.add(new Intent(context, DeleteImageActivity.class));
            imageSourceChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Intent[0]));
            return imageSourceChooser;

        

如果用户拒绝相机和图库的权限,我希望提示显示一个只有一个选项的选择器 - “删除图像”。

【问题讨论】:

【参考方案1】:

但这不是它的工作方式。在您的情况下,如果您知道用户没有授予相机或图库的权限,您可以只显示自己的对话框,询问用户是否要删除图像。

【讨论】:

我明白你在说什么。但是,我也请求许可。但是,如果用户即使在运行时拒绝该权限,相机或画廊选项也不应该显示,因为用户不允许这样做。问这个问题的另一种方法是,如何防止选择器只选择可用的选项,而不是显示选项(在这种情况下,只有一个选项) 你不能 :-( 这就是选择器的工作方式。如果只有一个选项,它不会询问用户,因为那将是愚蠢的。只有一个选择,所以选择器使给你。唯一的方法是如果你知道只有一个选项,就不要使用选择器 但这意味着我在向用户发出提示的方式上没有统一性。你会推荐什么其他方式来解决它?有什么可以接近复制选择器的吗? (除了手动设计以完全匹配选择器) 或者,在用户点击选项编号 1 或 2 后,我如何请求权限 如果您想使用Intent 启动相机应用程序,您不需要任何特殊权限。画廊也是如此。也许您对权限的工作方式感到困惑。

以上是关于如果只有一个意图,如何防止 Intent.createChooser 自动使用 Intent?的主要内容,如果未能解决你的问题,请参考以下文章

打开相机意图时如何防止android应用程序方向

如何防止应用关闭时 startCommand 的意图返回 null

防止新意图或切换应用程序破坏活动

扫描/识别 NFC 意图时防止提示音

如何防止文件被复制被拷贝,怎样禁止

如何防止用户更改密码后阅读?