我正在寻找一些通过应用修改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
答案 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的指导!