【问题标题】: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 会抱怨“权限仅授予系统应用程序”。现在,这令人困惑,因为我没有找到任何说明它确实只授予系统应用程序的文档。

所以,我想问一下是否有人遇到过这个问题,是否有某种文档可以详细解释这个问题?还是我只是错过了什么?

【问题讨论】:

标签: android android-permissions android-settings


【解决方案1】:

正如Brian 提供的stackoverflow 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);
     }
    

    【讨论】:

    • 这个我很熟悉。请检查我自己对这个问题的回答。
    猜你喜欢
    • 2018-03-31
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多