如何在非UserInterface板上授予动态android.permission.WRITE_SETTINGS权限

时间:2020-02-06 11:37:38

标签: android selinux

我已经以用户模式安装了应用程序,但没有root用户。因此,某些android.permissions(如写入权限)将被忽略并且未设置。能够从packages.xml以及命令“ adb shell dumpsys package”中进行识别

我想对我安装到设备上的应用程序设置写权限。 我可以访问android OS代码,有没有办法授予权限?要么通过变更政策?

注意:设备不是UI(用户界面)

请帮助!

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package=<package-name>
      xmlns:tools="http://schemas.android.com/tools"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-permission android:name="android.permission.WRITE_SETTINGS"  tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ProtectedPermissions" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application android:label="@string/app_name" >
        <service android:name=<service-name>
            <intent-filter >
              ---
            </intent-filter>
        </service>
    </application>
</manifest> 

2 个答案:

答案 0 :(得分:1)

在有根设备上,您可以使用以下命令:

adb shell appops set foo.bar.package WRITE_SETTINGS allow

答案 1 :(得分:0)

使用此命令adb shell pm grant you package android.permission.WRITE_SECURE_SETTINGS,只有系统应用程序和root用户应用程序可以写入设置,但是此命令可帮助您写入设置。

   public void setSettingsAutomaticDateTimeIfNeeded() {
    String timeZoneSettings = android.provider.Settings.Global.getString(
            this.getContentResolver(),
            android.provider.Settings.Global.AUTO_TIME_ZONE);
    Log.e(TAG, "auot update check true");
    if (timeZoneSettings.contentEquals("0")) {
        android.provider.Settings.Global.putString(
                this.getContentResolver(),
                Settings.Global.AUTO_TIME_ZONE, "1");
        Log.e(TAG, "Auto update checked make true");
    }

    String timeSettings = android.provider.Settings.Global.getString(
            this.getContentResolver(),
            android.provider.Settings.Global.AUTO_TIME);
    Log.e(TAG, "auot update check true");
    if (timeSettings.contentEquals("0")) {
        android.provider.Settings.Global.putString(
                this.getContentResolver(),
                Settings.Global.AUTO_TIME, "1");
        Log.e(TAG, "Auto update checked make true");
    }
}

并添加此inot清单

 <uses-permission
    android:name="android.permission.WRITE_SETTINGS"
    tools:ignore="ProtectedPermissions" />
<uses-permission
    android:name="android.permission.WRITE_SECURE_SETTINGS"
    tools:ignore="ProtectedPermissions" />