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

java.lang.SecurityException:未被授予此权限:关闭对话框时使用android.permission.WRITE_SETTINGS [Android]

问题分析

java.lang.SecurityException: 未被授予此权限: 关闭对话框时使用 android.permission.WRITE_SETTINGS 这个错误提示表明你的应用在尝试修改系统设置时没有获得相应的权限。

基础概念

在Android系统中,WRITE_SETTINGS 是一个特殊的权限,允许应用修改系统设置。这个权限通常用于更改系统显示设置、网络设置等。由于其敏感性,Android系统默认不允许应用获取这个权限。

相关优势

  • 系统设置修改:允许应用动态修改系统设置,提供更好的用户体验。
  • 灵活性:开发者可以根据应用需求调整系统设置,实现更多功能。

类型

  • 系统权限:这是一个系统级别的权限,不同于普通的运行时权限(Runtime Permissions)。

应用场景

  • 系统级应用:如系统UI、系统工具等。
  • 需要修改系统设置的第三方应用:如某些定制主题应用、网络优化工具等。

问题原因

  1. 权限未声明:在 AndroidManifest.xml 中没有声明 WRITE_SETTINGS 权限。
  2. 用户未授权:即使声明了权限,用户也需要手动授权。

解决方法

1. 声明权限

AndroidManifest.xml 中添加以下权限声明:

代码语言:txt
复制
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

2. 请求权限

从Android 6.0(API 级别 23)开始,需要动态请求 WRITE_SETTINGS 权限。可以通过以下代码请求权限:

代码语言:txt
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (!Settings.System.canWrite(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
        intent.setData(Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, REQUEST_CODE_WRITE_SETTINGS);
    }
}

onActivityResult 中处理权限请求结果:

代码语言:txt
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (Settings.System.canWrite(this)) {
                // 权限已授予,可以进行系统设置修改
            } else {
                // 权限未授予,提示用户
                Toast.makeText(this, "需要WRITE_SETTINGS权限", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

3. 用户授权

用户需要在系统设置中手动授权 WRITE_SETTINGS 权限。可以通过以下步骤引导用户:

  1. 打开应用设置页面。
  2. 找到应用详情页。
  3. 点击“权限”选项。
  4. 找到并开启 WRITE_SETTINGS 权限。

参考链接

通过以上步骤,你可以解决 java.lang.SecurityException: 未被授予此权限: 关闭对话框时使用 android.permission.WRITE_SETTINGS 的问题。

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

相关·内容

因为Android M权限问题导致的Permission Denial: reading com.android.providers.media.MediaProvider解决办法

, or grantUriPermission() 程序出错原因 最后查明是因为API过高权限访问有修改, 在API级别>=23, 权限访问被分为三个级别, 分别为”PROTECTION_NORMAL...PROTECTION_NORMAL是普通权限, 通过manifest文件在安装授予....PROTECTION_SIGNATURE是签名权限, 通过”检查manifest和app签名是否匹配app中声明的权限”在安装授予....对于 PROTECTION_DANGEROUS, 不仅需要在manifest中声明, 还需要在运行时通过requestPermissions获得, 也就是弹出来一个个对话框, 让用户确认是否授予app这些权限...这些是常见PROTECTION_DANGEROUS权限, 如果你在程序中使用了, 那么在API>=23, 很可能会不正常工作.

2.6K20

安卓 training-使用系统权限

如果应用需要使用其沙盒外的资源或信息,则必须请求相应权限。您可以在应用清单中列出相应的权限,声明应用需要权限。 根据权限的敏感性,系统可能会自动授予权限,或者需要由设备用户对请求进行许可。...例如,如果应用需要访问互联网、使用设备摄像头或者打开或关闭 WLAN,应用需要获得相应的权限。要查看系统权限的列表,请参阅正常权限和危险权限。 您的应用仅需要获得其直接执行的操作的权限。...在运行时请求权限(6.0 API 23) 从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装授予。...您可以采用的一个方法是仅在用户已拒绝某项权限请求提供解释。如果用户继续尝试使用需要某项权限的功能,但继续拒绝权限请求,则可能表明用户不理解应用为什么需要权限才能提供相关功能。...如果您请求 READ_CONTACTS 且用户授予权限,那么,当您请求WRITE_CONTACTS ,系统将立即授予您该权限,不会与用户交互。

1.8K10
  • activity组件导出实验

    android:mimeType。指定可以处理的数据类型,允许使用通配符的方式进行指定。...一个activity可以响应多个android:scheme,当一条中同时存在host、port、path, 数据的格式需要满足该条中指定的所有协定。...cmp=com.demo.homeapp/.TestActivity } from ProcessRecord 权限解释: normal:这是最低风险的权限,如果应用声明了权限,也不会提示安装应用的用户授权...(例如,如果声明了定位权限,则应用到定位功能,会明确提示用户,是否授予定位权限,但是protectionLevel为normal的不会明确提示,直接默认授予),系统直接默认该应用有此权限; dangerous...只有当发请求的应用和接收请求的应用使用同一签名文件,并且声明了该权限才会授权,并且是默认授权,不会提示用户授权 signatureOrSystem:这种权限应该尽量避免使用,偏向系统级,同一签名或系统级

    1.1K20

    Android 6.0 Permission权限与安全机制

    但是在android 6.0 Marshmallow版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限。 ?...java.lang.SecurityException: Permission Denial......所以app当然可以和以前一样正常使用了,但是还有一点需要注意的是6.0的系统里面,用户可以手动将该app的权限关闭,在 App info里面Permissions下边,可以关闭某个权限。...支持Marshmallow新版本权限机制   在Android M的api中,我们可以通过checkSelfPermission检测软件是否有某一项权限,以及使用requestPermissions去请求一组权限...下次为这个权限请求requestPermissions对话框就不弹出来了,系统会直接回调onRequestPermissionsResult函数,回调结果为最后一次用户的选择。

    1.7K40

    Android 6.0权限

    android 6.0 Marshmallow版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限。...只有那些targetSdkVersion 设置为23和23以上的应用才会出现异常,在使用危险权限的时候系统必须要获得用户的同意才能使用,要不然应用就会崩溃,出现类似 java.lang.SecurityException...: Permission Denial: reading com.android.providers.media.MediaProvider 的崩溃日志。...所以targetSdkVersion如果没有设置为23版本或者以上,系统还是会使用旧规则:在安装的时候赋予该app所申请的所有权限。...所以app当然可以和以前一样正常使用了,但是还有一点需要注意的是6.0的系统里面,用户可以手动将该app的权限关闭

    46510

    Android 6.0权限

    android 6.0 Marshmallow版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限。...只有那些targetSdkVersion 设置为23和23以上的应用才会出现异常,在使用危险权限的时候系统必须要获得用户的同意才能使用,要不然应用就会崩溃,出现类似 java.lang.SecurityException...: Permission Denial: reading com.android.providers.media.MediaProvider 的崩溃日志。...所以targetSdkVersion如果没有设置为23版本或者以上,系统还是会使用旧规则:在安装的时候赋予该app所申请的所有权限。...所以app当然可以和以前一样正常使用了,但是还有一点需要注意的是6.0的系统里面,用户可以手动将该app的权限关闭。 ? ? ?

    91070

    Android 13 适配指南

    权限,「权限的级别为“dangerous”」,因此 App 需要向用户显示运行时提示才能被授予权限(也就是代码里调用权限申请,在设置里打开不行),未被授予权限的App 的通知将被系统自动删除; 如果应用以...12L(API 级别 32)或更低版本为目标平台;当应用程序创建其第一个通知渠道,系统将显示权限对话框; 如果是现有应用更新,程序的目标 API 级别为: 以 Android 13 (33)为目标平台...或更低版本为目标平台,系统临时授予应用发送通知的权限,直到用户在权限对话框中明确选择一个选项; 最后测试和总结一下: 「如果是 TargetSDK 在 Android 12L (32) 以下,只要用户同意才能发送通知...Android 13 中引入了 “在使用时” 访问身体传感器(例如心率、体温和血氧饱和度)的概念,访问模式与 Android 10(API 级别 29)系统为位置信息引入的模式非常相似。...应用程序可以触发撤销授予调用 API 的包的一个或多个运行时权限,不需要访问特定运行时权限控制 API 的应用程序可以自行撤销这些权限,这样用户就可以确保这些应用程序不会在不知情的情况下使用这些API。

    5.2K31

    Android动态权限

    如果需要使用这些危险权限,首先必须在配置文件中声明,同时在运行时检查是否拥有权限,如果没有需要请求用户授予权限Android系统对所有权限进行了分组,称为权限组 。...调用方法将弹出权限请求对话框询问用户 “允许” 或 “拒绝” 指定的权限。...中有声明,否则调用方法请求,将不弹框,而是直接返回“拒绝”的结果; 第一次请求权限时,用户点击了“拒绝”,第二次再请求该权限时,对话框将出现“不再询问”复选框,如果用户勾选了“不再询问”并点击了“...拒绝”,则之后再请求权限将不弹框,而是直接返回“拒绝”的结果。...如果应用第一次请求权限时被用户拒绝,第二次再请求权限时,用户勾选了权限请求对话框的“不再询问”,则方法返回 false。 如果设备规范禁止应用拥有该权限方法也返回 false。

    1.4K50

    Android 运行时权限及APP适配

    Android 6.0起,Android加强了权限管理,引入运行时权限概念。对于: 1....Android 5.1(API 22)及以前版本,应用权限必须声明在AndroidManifest.xml中,应用在安装Android会列出其所需的所有权限供用户确认安装。 2....),以下会介绍区别: 普通权限:不会给用户隐私带来风险 应用声明在AndroidManifest.xml,系统会自动授予,无需应用申请。...危险权限:应用访问用户机密数据的权限,会有风险 1. 权限也必须声明在AndroidManifest.xml中 2....(...)) { 4 // 用户对此权限是拒绝状态,此时应用可自行弹窗告知用户,注意:如果用户在拒绝勾选了“不再询问”,方法会返回false,不再可靠,则可在onRequestPermissionsResult

    1.4K00

    Android 11适配攻略

    使用MediaStore 访问,无法直接使用File。访问其他应用的媒体文件需要READ_EXTERNAL_STORAGE权限。 其它目录。...如果用户在对话框中选择选项,系统会向应用授予临时的单次授权。 重置权限 如果用户在 Android 11 或更高版本上几个月未与应用互动,系统会自动重置应用的敏感权限。...当应用停止截取屏幕,就会失去该权限用例主要用于游戏直播应用。...从 Android 11 开始将不再支持功能,而是必须由用户先选择要授予或撤消哪些应用的权限变更可以让权限授予更有目的性,从而达到保护用户的目的。...好在用户授予权限之后,虽然app会被杀死,但是安装页面依然会弹出。 电话号码 应用在读取电话号码使用 READ_PHONE_STATE 权限

    3.9K11

    业界 | 谷歌版“剑桥分析事件”上演,华尔街日报发文谴责,谷歌长文回应

    我们的分析显示,多达438个应用程序可能已使用API。 我们没有发现任何开发人员已经意识到了这个错误或滥用了相关的API,我们发现没有任何证据表明任何配置文件数据已被滥用。...每当用户数据可能受到影响,我们就会以超出承担法律要求的级别进行整改,并且使用一些以用户为核心的准则来判断是否为用户提供通知。...行动2:我们将启动更高级的Google帐户权限,这些权限将显示在各个对话框中。 当应用提示你访问Google帐户数据,我们始终要求你查看所需要的数据,并且你必须授予其明确的权限。...当应用请求访问您消费者版Google帐户中的任何数据,这就是现在所见的过程(您始你可以选择是否授予权限请求): ? 发现3:当用户授予应用其Gmail的访问权限时,他们会考虑某些特定情况。...发现 4 :当用户授予 Android 应用 短信、联系人和通话权限的时候,他们这样做是具有特定使用场景的。

    1.1K50

    Android 运行时权限及APP适配

    Android 6.0起,Android加强了权限管理,引入运行时权限概念。对于: 1....Android 5.1(API 22)及以前版本,应用权限必须声明在AndroidManifest.xml中,应用在安装Android会列出其所需的所有权限供用户确认安装。 2....),以下会介绍区别: 普通权限:不会给用户隐私带来风险 应用声明在AndroidManifest.xml,系统会自动授予,无需应用申请。...危险权限:应用访问用户机密数据的权限,会有风险 1. 权限也必须声明在AndroidManifest.xml中 2....(...)) { 4 // 用户对此权限是拒绝状态,此时应用可自行弹窗告知用户,注意:如果用户在拒绝勾选了“不再询问”,方法会返回false,不再可靠,则可在onRequestPermissionsResult

    1.4K60

    Android 12 适配攻略

    12 系统的APP上,请求ACCESS_FINE_LOCATION权限时,系统权限对话框会提供两个选项,即允许App获取确切位置,还是仅允许获取大致位置。...##### 麦克风和摄像头切换开关 以Android 12为目标平台的App,用户状态栏新增麦克风使用权限和摄像头使用权限,可以一键启用/停用。...图片 如果在画面录制过程中,关闭摄像头使用权限时,录制的会是空白画面;如果在声音录制过程中,关闭麦克风使用权限时,录制的会是无声音频。 官网提供了设备是否支持麦克风和摄像头切换开关的代码。...,那么当下次App再需要启动摄像头或麦克风,系统就会提醒用户,相关硬件的使用权限关闭,并申请重新开启。...权限重置 以 Android 12 为目标平台的App,用户几个月未与App互动,系统会自动重置授予的所有权限并将您的应用置于休眠状态。

    3.1K20

    Android6.0运行时权限处理

    概述 从Android6.0(API23)开始,用户可以在应用运行时向其授予权限,而不是在应用安装授予。...兼容性 如果设备的系统版本是Android5.1或者更低的版本,或者应用的 targetSdkVersion为22或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予权限;如果用户不授予权限...因为用户可以自由的开关权限,所以,即使应用昨天使用了相机,它不能假设自己今天仍具有该权限。...如果用户继续尝试使用需要某项权限的功能,但拒绝权限请求,则可能表明用户不理解应用为什么需要权限才能提供相关的功能,这时就可以显示解释给用户。...shouldShowRequestPermissionRationale(): 如果应用之前请求过权限但用户拒绝了请求,方法返回 true; 如果用户过去拒绝了权限请求,并在权限请求系统对话框选择了

    1.1K30

    Android总结篇系列之Permission

    前言:权限是一种安全机制。Android权限主要用于限制应用程序内部某些具有限制性特性的功能使用以及应用程序之间的组件访问。...对于用户来说,这无疑是一种对自身安全的保障,用户在安装程序的时会提示用户程序需要哪些权限,比如连网,发短信等等,这些权限完全由用户来选择是否给予权限。...*java.lang.SecurityException: Permission Denial **** ---- Android权限列表简介 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES...应用删除广播 android.permission.BROADCAST_PACKAGE_REMOVED 当一个应用在删除触发一个广播 收到短信广播 android.permission.BROADCAST_SMS...允许程序使用SIP视频服务 使用振动 android.permission.VIBRATE 允许振动 唤醒锁定 android.permission.WAKE_LOCK 允许程序在手机屏幕关闭后后台进程仍然运行

    2.4K31

    Android M (API23) 中对权限的授权处理

    在API 23中,如果我们将compileSdkVersion和targetSdkVersion同时指定为23,而且我们没有显式的提醒用户去授予权限, 那么将导致App运行的崩溃。...用户Allow了权限,则表示该权限已经被授权,无须其它操作; * ********2).用户Deny了权限,则下次启动Activity会再次弹出系统的Permisssions申请授权对话框。...“never ask again”的checkbox,下次启动就必须自己写Dialog或者Snackbar引导用户到应用设置里面去手动授予权限; * ********2).如果用户未勾选上面的选项,...String[] denidPermissions = denidArray.toArray(new String[denidArray.size()]); // 如果该字符串数组长度大于0,说明有未被授权的权限...again”的选项,再次调用shouldShowRequestPermissionRationale(),返回false; * ***4).设备的系统设置中,禁止了应用获取这个权限的授权,则调用

    1.6K20

    拖不得了,Android11真的来了,最全适配实践指南奉上

    申请所有文件访问权限 电话号码相关权限 ⭐ “Android 11 更改了您的应用在读取电话号码使用的与电话相关的权限。 ” 具体改了什么呢?...后台位置信息访问权限 ⭐ “在搭载 Android 11 的设备上,当应用中的某项功能请求在后台访问位置信息,用户看到的系统对话框不再包含用于启用后台位置信息访问权限的按钮。...所以这里是不能停用文件的设备到设备迁移,但是可以停用云端备份和恢复 自动重置权限 “如果应用以 Android 11 为目标平台并且数月未使用,系统会通过自动重置用户已授予应用的运行时敏感权限来保护用户数据...如果用户在对话框中选择选项,系统会向应用授予临时的单次授权。 ” 简单的说,就是在申请与位置信息、麦克风或摄像头相关的权限时,系统会自动提供一个单次授权的选项,只供这一次权限获取。...新权限弹窗 权限对话框的可见性 “Android 11 建议不要请求用户已选择拒绝的权限。在应用安装到设备上后,如果用户在使用过程中屡次针对某项特定的权限点按拒绝,操作表示其希望“不再询问”。

    7K340266
    领券