我正在尝试在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"/>
然后,在我的主动脉中,我添加了一个按钮来运行您之前阅读的命令。
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();}
}
});
构建了我的应用后,我将其运行在5倍上,通过ADB,我键入此命令以允许编写安全设置:adb shell pm grant com.customizer.smart.batterysavercustomizer android.permission.WRITE_SECURE_SETTINGS
,并且此命令在没有错误的情况下对此进行了拒绝。但是,当我尝试利用我的" testbutton"时,什么也没有发生,并且在AndroidMonitor内部进行0个ERORR。
最后一次尝试是在根帮助下。我编辑了我的预览命令按钮:
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命令的应用程序"自定义导航栏"应用程序如何无根?我遵循了这一点:XDA指南
您应该使用设置类代替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
}
}
});