android.permission.WRITE_SETTINGS 是不是只授予系统应用程序?

Posted

技术标签:

【中文标题】android.permission.WRITE_SETTINGS 是不是只授予系统应用程序?【英文标题】:Is android.permission.WRITE_SETTINGS only granted to system apps?android.permission.WRITE_SETTINGS 是否只授予系统应用程序? 【发布时间】:2020-11-21 07:35:59 【问题描述】:

我们目前正在开发一个应用程序,我们希望在其中更改一些系统设置,当然需要用户许可。 android 文档说要做到这一点,你必须添加以下权限:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

此外,必须明确要求用户启用此权限。摘自https://developer.android.com/reference/android/Manifest.permission#WRITE_SETTINGS 说:

注意:如果应用以 API 级别 23 或更高级别为目标,应用用户必须 通过权限显式将此权限授予应用程序 管理画面。该应用程序通过发送一个请求用户的批准 意图行动Settings.ACTION_MANAGE_WRITE_SETTINGS。该应用程序可以 通过调用检查它是否具有此授权 Settings.System.canWrite().

到目前为止,一切都很清楚。但是,当将权限添加到 AndroidManifest.xml 文件时,Android Studio 会抱怨“权限仅授予系统应用程序”。现在,这令人困惑,因为我没有找到任何说明它确实只授予系统应用程序的文档。 所以,我想问一下是否有人遇到过这个问题,是否有某种文档可以详细解释这个问题?还是我只是错过了什么?

【问题讨论】:

检查这个。 ***.com/questions/32083410/… 【参考方案1】:

正如Brian 提供的*** question 中的用户passsy 所述,android.permission.WRITE_SETTINGSandroid:protectionLevel"signature",这使得该权限自API 级别23 起无法在用户应用程序中使用。 权限保护级别说明见https://developer.android.com/guide/topics/manifest/permission-element#plevel。

【讨论】:

【参考方案2】:

您需要专门从用户那里获得用户权限,我的意思是您必须将用户带到一个屏幕,用户可以在该屏幕上向您的应用授予 WRITE_SETTINGS 权限。

因此,当您想要更改系统设置时,您必须检查用户是否已授予权限:

private boolean checkSystemWritePermission() 
    boolean retVal = true;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
        retVal = Settings.System.canWrite(this);
        Log.d("TAG", "Can Write Settings: " + retVal);
        if(retVal)
            ///Permission granted by the user
        else
            //permission not granted navigate to permission screen
            openAndroidPermissionsMenu();
        
    
    return retVal;


private void openAndroidPermissionsMenu() 
    Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
    intent.setData(Uri.parse("package:" + this.getPackageName()));
    startActivity(intent);
 

【讨论】:

这个我很熟悉。请检查我自己对这个问题的回答。

以上是关于android.permission.WRITE_SETTINGS 是不是只授予系统应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

Android权限(permission)大全

android.permission.WRITE_SECURE_SETTINGS 错误

android.permission.WRITE_SETTINGS 是不是只授予系统应用程序?

android权限(permission)大全

Appium+Python 报错“Requires permission android.permission.WRITE_SECURE_SETTINGS”

Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS