我正试图在Android Oreo上使用这套“命令”,但我有一些问题。为了测试我在Nexus 5x上使用此命令:
adb shell settings put secure sysui_nav_bar "space,recent;home;back,space"
所以我决定在我的应用程序中实现此命令,并尝试没有root帮助。在应用程序清单中,我添加了写安全设置的权限:
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
然后在我的MainActivity中添加了一个按钮来运行您之前读过的命令。
testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
Process process = Runtime.getRuntime().exec("settings put secure sysui_nav_bar \"space,recent;home;back,space\"");
} catch (Exception e) {Toast.makeText(getApplicationContext(), "" + e, Toast.LENGTH_LONG).show();}
}
});
我的应用程序构建后,我在我的5x上运行它并通过adb我键入此命令以允许编写安全设置:adb shell pm grant com.customizer.smart.batterysavercustomizer android.permission.WRITE_SECURE_SETTINGS
并且此命令已被执行且没有错误。但是,当我试图点击我的“testButton”时,没有任何事情发生,并且在androidmonitor中有0个erorrs。
我做的最后一次尝试是使用root帮助。我编辑了我的预览命令按钮:
testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
Process process = Runtime.getRuntime().exec("su -c settings put secure sysui_nav_bar \"space,recent;home;back,space\"");
} catch (Exception e) {Toast.makeText(getApplicationContext(), "" + e, Toast.LENGTH_LONG).show();}
}
});
当我点击我的testButton时,应用程序要求获得root权限,并且它可以正常工作。但是如何在同一部手机上使用相同adb命令的应用程序“自定义导航栏”应用程序在没有root的情况下工作? 我遵循了这个:guide on XDA
答案 0 :(得分:1)
您应该使用Settings类而不是Runtime.getRuntime()。exec()
testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SECURE_SETTINGS) == PackageManager.PERMISSION_GRANTED) {
Settings.Secure.putString(context.getContentResolver(), "sysui_nav_bar", valueToSave);
} else {
//Write secure Settings permission not granted
//Show instructions about how to grant it via ADB
}
}
});