首页
学习
活动
专区
工具
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 类。...如需了解有关权限和共享文件的详细信息,请参阅共享文件。...恩,之所以不需要权限,主要是因为Intent的action为ACTION_IMAGE_CAPTURE,当我们startActivity后,会辗转调用Instrumentation的execStartActivity...所以addFlags方式对于ACTION_IMAGE_CAPTURE在5.0以下是无效的,所以需要使用grantUriPermission,如果是正常的通过setData分享的uri,使用addFlags

1.7K40
  • 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.4K30

    从TargetApi22升级到TargetApi26注意事项

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

    86210

    透过FileProvider再看ContentProvider

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

    1.2K20

    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.2K20

    SecurityException: A Security Violation Occurred 完美解决方法

    从 Android 6.0(API Level 23)开始,系统引入了运行时权限机制。...如何处理 SecurityException?️ 2.1 确保在清单文件中正确声明权限 最基本的处理方式是在应用的 AndroidManifest.xml 文件中声明所需的权限。...("SecurityException", "摄像头权限未授予,无法访问:" + e.getMessage()); // 进一步处理逻辑,例如引导用户开启权限 } 2.4 设计良好的用户体验 当...SecurityException 由于用户未授予必要权限而抛出时,开发者可以通过友好的用户界面引导用户授予相应权限,而不是简单地让应用崩溃。...new AlertDialog.Builder(this) .setTitle("需要摄像头权限") .setMessage("此功能需要使用摄像头权限,请授予

    13110

    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

    83500

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

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

    1.7K40

    R与ACTION_IMAGE_CAPTURE

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

    59710

    activity组件导出实验

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

    1.2K20

    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.5K70

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

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

    7.8K42

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

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

    1.6K10

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

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

    69520

    安卓应用安全指南 4.3.1 创建使用内容供应器 示例代码

    4) 验证内部签名权限是否由内部应用定义。 5) 验证参数的安全性,即使这是来自内部应用的请求。 6) 由于请求应用是内部的,因此可以返回敏感信息。...4.3.1.5 创建/使用临时内容供应器 临时内容供应器基本上是一个私有内容供应器,但它允许特定的应用访问特定的 URI。通过向目标应用发送一个指定了特殊标志的意图,即可为这些应用提供临时访问权限。...内容供应器方的应用可以将访问权限主动授予其他应用,并且还可以将访问权限被动授予索要临时访问权限的应用。 下面展示了实现临时内容供应器的示例代码。...2) 使用grant-uri-permission指定路径来临时授予访问权。 3) 即使数据来自临时访问应用,也应该消息并安全地处理收到的请求数据。 4) 可以返回公开给临时访问应用的信息。...5) 为意图指定 URI 来授予临时访问权。 6) 为意图指定访问权限来授予临时访问权。 7) 将显式意图发送给应用来授予临时访问权。 8) 将意图返回给请求临时访问权的应用。

    34210

    记录两个神奇的android bug

    大客户必须重点关照.jpg 第一个bug,SecurityException: Permission denied (missing INTERNET permission?)...初看一下以为是网络权限的问题,难道客户没有添加网络的权限,这显然不可能。 从stackoverflow上搜到这篇文章很有帮助。大致了解出现这个bug的原因。...这个权限对于sdk而言,我还是很纠结地,因为很多客户不一定会使用到这个权限。如果我多添加了这个权限的判断会导致一些客户无法使用sdk。...其次,在root过的设备上,用户可以通过工具来修改在运行时授予已安装应用的权限。同时,在某些定制的rom上也可以这么做的。 再次,Android 6.0以后引入了全新的权限管理机制,称为运行时权限。...它允许用户更多地控制授予的权限(也允许选择性授予),或允许一个撤销已授予的权限,无需应用程序删除。 知道这个bug产生的原因之后,那我们来解决问题吧。

    69110
    领券