首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SecurityException:从ACTION_IMAGE_CAPTURE找不到uri的持久权限授予

是一个安全异常,表示在使用ACTION_IMAGE_CAPTURE拍照时,无法获取到URI的持久权限。

在Android开发中,ACTION_IMAGE_CAPTURE是一个用于启动相机应用程序拍照的Intent动作。当我们使用该动作时,需要确保应用程序具有相应的权限,以及正确处理URI的持久权限。

解决这个异常的方法如下:

  1. 确保在AndroidManifest.xml文件中添加相机权限:<uses-permission android:name="android.permission.CAMERA" />
  2. 在运行时请求相机权限:if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE); }
  3. 处理权限请求结果:@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限已授予,可以执行拍照操作 } else { // 拒绝了相机权限请求,需要给出相应提示或处理 } } }
  4. 确保在启动相机应用程序之前,为URI授予持久权限:Uri photoUri = FileProvider.getUriForFile(this, "com.example.fileprovider", photoFile); Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); captureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); startActivityForResult(captureIntent, CAPTURE_IMAGE_REQUEST_CODE);

在上述代码中,"com.example.fileprovider"是FileProvider的授权文件路径,需要在AndroidManifest.xml文件中进行配置。

总结:

SecurityException:从ACTION_IMAGE_CAPTURE找不到uri的持久权限授予是一个安全异常,解决方法包括添加相机权限、运行时请求权限、处理权限请求结果以及为URI授予持久权限。在腾讯云的相关产品中,可以使用腾讯云移动推送服务(https://cloud.tencent.com/product/tpns)来实现消息推送功能,以提升用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android7.0适配之FileProvider

image 未处理6.0权限,有需要自行处理下,nexus系列如果未处理,需要手动在设置页开启存储权限。...同样,官网也给出了解决方案: 要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权最简单方式是使用 FileProvider 类。...如需了解有关权限和共享文件详细信息,请参阅共享文件。...恩,之所以不需要权限,主要是因为Intentaction为ACTION_IMAGE_CAPTURE,当我们startActivity后,会辗转调用InstrumentationexecStartActivity...所以addFlags方式对于ACTION_IMAGE_CAPTURE在5.0以下是无效,所以需要使用grantUriPermission,如果是正常通过setData分享uri,使用addFlags

1.6K40

Android 10(Q)11(R) 分区存储适配

其中,对共享目录权限进行了细分: 无需申请权限操作:通过 MediaStore API对媒体集、文件集进行媒体/文件添加、对自身APP创建 媒体/文件 进行查询、修改、删除操作。...应用可通过执行以下操作向用户请求名为所有文件访问权限特殊应用访问权限: 在清单中声明 MANAGE_EXTERNAL_STORAGE 权限。...使用 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您应用启用以下选项:授予所有文件管理权限..., PICK_PDF_FILE) } 3)授予对目录内容访问权限 用户选择目录后,可访问该目录下所有内容。...总结 Android 10提出分区存储之后到现在已经一年多了,所以Google 强制推行态度到现在 targetSDK >=30 才强制启用分区存储来看,Google 还是渐渐地选择给开发者留更多时间

2.3K30

TargetApi22升级到TargetApi26注意事项

1.运行时权限 如果你声明在清单文件权限,这对用户隐私或设备操作不构成很大风险,系统会自动将这些权限授予应用程序。...,您应用必须提示用户在运行时授予权限。...或 MODE_WORLD_WRITEABLE 进行操作将触发 SecurityException。...6.权限组调整 安卓8.0之前,如果应用在运行时申请一个权限,并且用户授予了这个权限,那么系统会错误将这个权限所属权限组里并且在manifest里注册过权限授予这个应用。...对于targetApi为8.0应用,以上行为已经被修正了,应用将只被授予其申请权限。但是,如果应用之后再申请同一权限组中其他权限时,将自动被授予

78610

透过FileProvider再看ContentProvider

在Android7.0,Android提高了应用隐私权,限制了在应用间共享文件。如果需要在应用间共享,需要授予要访问URI临时访问权限。...要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权最简单方式是使用 FileProvider 类。...自己可以不用申请存储权限,利用应用B就达到了存储文件这一危险权限。 可以看到,这个之前落伍方案,自身到对方,都是不太好选择。 所以Google就想了一个办法,把对文件访问限制在应用内部。.../external/photo.jpg 然后其他应用可以通过这个绝对路径来向文件所属应用 索要 文件数据,所以文件所属应用本身必须拥有文件访问权限。...易用性,安全性,完整度等各个方面考虑,Google选择了ContentProvider为这次限制应用分享文件 解决方案。于是,FileProvider诞生了。 具体做法就是: <!

1.1K20

Android各版本迭代信息集合

这一点其实就是限制了在应用间共享文件,如果需要在应用间共享,需要授予要访问URI临时访问权限,我们要做就是注册FileProvider: 1)声明FileProvider。...Uri uri = Uri.fromFile(photoFile); } Android8.0 修改运行时权限错误 在 Android 8.0 之前,如果应用在运行时请求权限并且被授予权限,系统会错误地将属于同一权限组并且在清单中注册其他权限也一起授予应用...对于针对 Android 8.0 应用,系统只会授予应用明确请求权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限请求都将被自动批准。...也就是说,以前你申请了READ_EXTERNAL_STORAGE权限,应用会同时给你授予权限WRITE_EXTERNAL_STORAGE权限。...println("image uri is $uri") } } 权限再次升级 Android10开始普通应用不再允许请求权限android.permission.READ_PHONE_STATE

1.1K20

FileProvider你了解多少?透过FileProvider来看看四大组件之一ContentProvider!

在Android7.0,Android提高了应用隐私权,限制了在应用间共享文件。如果需要在应用间共享,需要授予要访问URI临时访问权限。...要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权最简单方式是使用 FileProvider 类。...自己可以不用申请存储权限,利用应用B就达到了存储文件这一危险权限。 可以看到,这个之前落伍方案,自身到对方,都是不太好选择。 所以Google就想了一个办法,把对文件访问限制在应用内部。...易用性,安全性,完整度等各个方面考虑,Google选择了ContentProvider为这次限制应用分享文件 解决方案。于是,FileProvider诞生了。 具体做法就是: <!...info.grantUriPermissions) { throw new SecurityException("Provider must grant uri permissions

75600

Android7.0版本影响开发改进分析

权限策略更改有多重副作用: 私有文件文件权限不应再由所有者放宽,为使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE而进行此类尝试将触发SecurityException...App仍可能使用原生API或File API来修改它们私有目录权限。但是Google强烈反对放宽私有目录权限。 传递软件包网域外 file://URI可能给接收器留下无法访问路径。...针对Android 7.0或更高版本开发应用在尝试访问COLUMN_LOCAL_FILENAME时会触发 SecurityException。...若要在应用间共享文件,您应发送一项content://URI,并授予URI临时访问权限。进行此授权最简单方式是使用FileProvider类。如需有关权限和共享文件更多信息,请参阅共享文件。....fileProvider grantUriPermissions:必须是true,表示授予 URI 临时访问权限 exported:必须是false resource:中@xml/file_paths

84110

R与ACTION_IMAGE_CAPTURE

说到ACTION_IMAGE_CAPTURE,大家肯定不陌生,如果我们只想简简单单拍个照片,然后在应用中使用,那它肯定是最快方式。...当然ACTION_IMAGE_CAPTURE也是有不少坑: 有些相机会以竖屏形式保存图片,有些相机会以横屏方式保存图片,设置一个EXIF标志说“嘿,图片查看器,展示时候请给我旋转一下”。...而且,这些行为居然都是合法,因为 ACTION_IMAGE_CAPTURE没有明确指定用哪种方式保存。...文档说我们可以用EXTRA_OUTPUT来指定图片保存位置,但是什么样EXTRA_OUTPUT是有效,文档没说。是只能用file:// Uri呢,还是content:// Uri也有效呢?...不过这样也仅仅是在糟糕情况上稍微改变了一点点,变成了我们开发者去指定用户可以使用相机,不管开发体验上还是用户体验上,都是比较糟,我们开发者可能还会被用户骂,为什么不让我用美图…… 整体上我是不太明白为什么谷歌现在要加这个限制

56910

Android 在程序运行时申请权限实例讲解

("tel:10000")); startActivity(intent); }catch (SecurityException e){ e.printStackTrace(); }...错误信息中提示我们Permission Denial,可以看出,是由于权限被禁止所导致,因为6.0及以上系统在使用危险权限时都必须进行运行时权限处理。...("tel:10000")); startActivity(intent); }catch (SecurityException e){ e.printStackTrace(); } }...没有关系,用户随时都可以将授予程序危险权限进行关系,进入Settings– Apps– RuntimePermissiontTest– Permissions,界面如图: ?...在这里我们就可以对任何授予危险权限进行关闭了。 以上这篇Android 在程序运行时申请权限实例讲解就是小编分享给大家全部内容了,希望能给大家一个参考。

84050

Android 11 强制用户使用系统相机?

最近在Android开发者官网中查看Android 11版本变更记录时候,发现一个有意思改动 ? 此项变更是说在使用Intent创建拍照,录像隐式请求时候,只有手机预装系统相机才会响应。...,OEM厂商海外机型肯定是不能改)。...但从现在版本迭代中可以看到,官方基于对用户隐私和安全保护考虑,对于API限制是越来越多了。...这种方式开发简单,而且不需要向系统请求Camera权限,但是在M之后,只要在manifest文件中申请了Camera权限,仅仅使用action为ACTION_IMAGE_CAPTUREintent时,...也必须要先动态申请Camera权限,否则将会抛出异常 java.lang.SecurityException: Permission Denial 官方文档中也注明了这一点 ?

1.6K40

activity组件导出实验

遇到这样问题,如果它们只被同一个软件中代码调用,将activity属性改为android:exported=”false”,如果组件需要对外暴露,应该通过自定义权限限制对它调用。..."> 启动方代码: Intent intent = new Intent(); intent=new Intent("com.demo.homeapp.test", Uri.parse("tea:...启动方代码不变,来改变被启动方代码测试权限。...: normal:这是最低风险权限,如果应用声明了此权限,也不会提示安装应用用户授权(例如,如果声明了定位权限,则应用到定位功能时,会明确提示用户,是否授予定位权限,但是protectionLevel...为normal不会明确提示,直接默认授予),系统直接默认该应用有此权限; dangerous:这种级别的权限风险更高,拥有此权限可能会访问用户私人数据或者控制设备,给用户带来负面影响,这种类型权限一般不会默认授权

1.1K20

Android权限管理原理(4.3-6.x)

Android系统在MarshMallow之前,权限都是在安装时候授予,虽然在4.3时,Google就试图在源码里面引入AppOpsManager来达到动态控制权限目的,但由于不太成熟,在Release...App定位权限,如果需要授权,就弹出一个系统对话框让用户操作,并根据用户操作将结果持久化在文件中,如果在Setting里设置了响应权限,也会去更新相应权限操作持久化文件/data/system/appops.xml...appops.xml真正被系统使用时Android6.0开始,其实Android6.0是有两套权限管理,这其实很混乱,不知道Google怎么想,不过6.0似乎也有漏洞:权限授予跟回收权限好像并不配对...心里先有个底,权限更新,持久化,恢复都是通过PKMS来进行。...权限更新及持久化 RuntimePermission恢复(其实这里也包含普通权限) 这些持久数据会在手机启动时候由PMS读取,开机启动,PKMS扫描Apk,并更新package信息,检查/data

2.3K70

全方位理解Android权限之Android权限系统1

如果应用已经获得了与正在申请权限同一个权限其他权限授权,那么系统会自动将正在申请权限授予应用,不需要任何与用户交互行为。...比如,如果一个应用之前已经获得了READ_CONTACTS权限授权,那么在之后应用请求WRITE_CONTACTS权限时,系统会自动将该权限授予应用。...附加权限级别 除了基础权限级别的其他权限级别都属于附加权限级别。它们必须附加在基础权限级别上使用。目前系统定义权限来看,附加权限级别基本都是与signature基础权限级别搭配使用。...这里面还有一个appop权限,稍后会介绍这个东西。 默认授予权限 前面介绍protectionLevel时候知道,只要App满足对应权限保护级别,就可以默认获取对应权限。...但是有一个没有提到,就是dangerous权限。 我们知道,dangerous权限是需要用户手动确认,所以要怎样默认授予其对应权限呢? 这个涉及到Framework层修改。

6.4K41

隐私策略更新 | Android 11 应用兼容性适配

请注意,写入权限并不包含读取访问权限。当被 intent 触发以后,接收端应用会被授予对相关 URI 临时访问权限。...Provider 访问权限用例,并确保授予适当 URI 权限。...用户授予权限原因排行。来源:Android 用户研究报告 ? △ 大多数用户会为了使用某个特定功能而选择同意授权 这项策略对于敏感权限尤其适用,如位置访问权限。...这种方法为用户提供了控制权限授予级别的选择。此外,您还可以有策略地显示一个权限申请说明,或者设计一个合理交互界面,为用户提供更多信息,以说明用户授予位置权限之后所获得功能提升。 ?...出于隐私方面的考虑,这些相对“强大”持久性和唯一性标识符不适合用于大部分应用场景。 Android 10 开始,系统对不可重置设备标识符 实施了限制。

1.5K10

Android 悬浮窗权限各机型各系统适配大全(总结)

uri = Uri.fromParts("package" , packageName, null); intent.setData(uri); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK...和小米一样,首先也要通过 API19 版本添加 AppOpsManager 类判断是否授予权限: /** * 检测 meizu 悬浮窗权限 */ public static boolean checkFloatWindowPermission...; } return false; } 然后是跳转去悬浮窗权限授予界面: /** * 去魅族权限申请页面 */ public static void applyPermission(Context context...; } return false; } 如果没有授予悬浮窗权限,就跳转去权限授予界面: public static void applyPermission(Context context) { Intent...s=28f0e5bf48e2d02e1f063670e435b1232f07ba03 我们里面寻找关于 type_toast 相关变更: ?

6.3K31

安卓应用安全指南 4.6.3 处理文件 高级话题

优点是访问权限变化,以及允许访问应用范围。 特别是安全角度来看,这是一个很大优点,可以详细控制允许访问应用。...、仅添加、读写、读+添加 可以控制是否将权限授予应用,它们尝试独立和暂时访问内容供应器和服务。...正如文件创建中所说明安全设计角度来看,目录基本上也应该设置为私有的。 当信息共享取决于访问权限设置时,可能会产生意想不到副作用,所以应采取其他方法用于信息共享。...通过startActivityForResult发送此意图,可以启动一个对话框,在终端屏幕上请求访问权限,并且 - 如果用户授予权限 - 每个存储卷上指定目录都可以访问。...授予访问外部存储权限时,应用可以访问预期目标以外目录。 使用存储器访问框架来要求用户选择可访问目录,会导致繁琐过程,用户必须在每次访问时配置一个选择器。

67020
领券