Android应用无法修改系统设置

时间:2014-11-21 15:44:48

标签: java android android-intent android-manifest android-4.4-kitkat

我正在寻找一些通过应用修改Android系统设置的帮助。

我在让自定义Android应用在Kitkat 4.4.2下正常运行时遇到了一些麻烦。我不确定沮丧的根源是什么,但我认为我在Manifest中缺少某种安全设置或技巧。

背景:我不是开发人员,但这个项目已经落到了我的腿上。在部署我们的平板电脑之前,我们将MDM和公司apk安装到平板电脑上,并运行一个简单的程序来配置一些系统设置。我们在平板电脑上执行root并在此过程中安装SU二进制文件。

我已经在我的清单中添加了ACCESS_SUPERUSER,但是SuperSU没有提示我为此应用请求SU访问权限。此外,如果我尝试运行该应用程序,我会收到“应用程序未安装”的Toast消息。 (我用下面的APPLICATION替换了应用程序名称)

Java代码

Settings.Global.putInt(MainActivity.this.getContentResolver(), Settings.Global.INSTALL_NON_MARKET_APPS, 1);
Settings.Global.putInt(MainActivity.this.getContentResolver(), Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 1);
Settings.Secure.putInt(MainActivity.this.getContentResolver(), Settings.Secure.LOCK_PATERN_ENABLED, 0);
Settings.Secure.putInt(MainActivity.this.getContentResolver(), Settings.Secure.LOCK_PATTERN_VISIBLE, 0);
Settings.System.putInt(MainActivity.this.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 300000);
Settings.Secure.putInt(MainActivity.this.getContentResolver(), Settings.Global.ADB_ENABLED, 0);

清单

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

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:persistent="false"
        android:permission="android.permission.WRITE_SECURE_SETTINGS"
        android:exported="true" >
        <activity
            android:name="com.example.APPLICATION.MainActivity"
            android:label="@string/app_name"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>


</manifest>

Logcat错误

  

11-20 17:17:51.749:E / Launcher(686):发射器没有   启动Intent的权限{act = android.intent.action.MAIN   cat = [android.intent.category.LAUNCHER] flg = 0x10200000   cmp = com.example.APPLICATION / .MainActivity}。确保创建一个MAIN   intent-filter用于相应的活动或使用导出的   此活动的属性。 tag = ApplicationInfo(title = SetSet id = -1   type = 0 container = -1 screen = -1 cellX = -1 cellY = -1 spanX = 1 spanY = 1   dropPos = null)intent = Intent {act = android.intent.action.MAIN   cat = [android.intent.category.LAUNCHER] flg = 0x10200000   cmp = com.example.setset / .MainActivity}

     

11-20 17:32:16.169:E / AndroidRuntime(4744):   java.lang.RuntimeException:无法启动活动   ComponentInfo {com.example.setset / com.example.APPLICATION.MainActivity}:   java.lang.SecurityException:Permission denial:写入安全   设置需要android.permission.WRITE_SECURE_SETTINGS

2 个答案:

答案 0 :(得分:3)

似乎除了执行您正在执行的所有操作之外,您还需要将应用程序作为系统应用程序运行。您正在点击WRITE_SECURE_SETTINGS权限问题,详细解释here

此外,您可能还想将以下内容添加到清单中:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
coreApp="true"
android:sharedUserId="android.uid.system">

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

答案 1 :(得分:1)

我的决议需要包含一些不同的东西。我最终采取的解决方案是以超级用户身份运行应用程序,现在似乎正确设置了系统设置。请注意,我在root设备上运行此应用程序。

首先,在Manifest中,我需要从应用程序标记中删除此行:

android:permission="android.permission.WRITE_SECURE_SETTINGS"

不确定推理。看起来您无法在应用程序标记中调用安全权限。

在我的MainActivity中,我在try语句中添加了以下su调用,并添加到下面的设置命令中:

Process p = Runtime.getRuntime().exec("su");

感谢@ The-Metal-Beard的指导!