我有一个kiosk模式应用程序,可以隐藏所有系统UI的痕迹(通知栏和导航按钮)。 在Android Lollipop之前的版本上,以下操作正常(作为root):
service call activity 42 s16 com.android.systemui
然而,在棒棒糖版本中,这会使屏幕完全变黑并隐藏系统界面。因此它无法使用。
有人知道解决方法吗?
我尝试了设备所有者/管理员方案的屏幕固定,但不幸的是,这不可接受,因为它不能完全隐藏系统界面,当从屏幕底部向上滑动时会留下返回按钮。
我有一个kiosk模式应用程序,可以隐藏所有系统UI的痕迹(通知栏和导航按钮)。 在Android Lollipop之前的版本上,以下操作正常(作为root):
service call activity 42 s16 com.android.systemui
然而,在棒棒糖版本中,这会使屏幕完全变黑并隐藏系统界面。因此它无法使用。
有人知道解决方法吗?
我尝试了设备所有者/管理员方案的屏幕固定,但不幸的是,这不可接受,因为它不能完全隐藏系统界面,当从屏幕底部向上滑动时会留下返回按钮。
pm disable-user com.android.systemui
,然后设备所有者方法将正常工作。<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
&device-owner package="com.mycompany" name="*mycompany" />
pm disable com.android.systemui
,并且不需要使用设备所有者,因为我的应用程序是设备上唯一的主屏幕应用程序。 - Nova Entropypm disable com.android.systemui
,但在我的设备上没有任何作用。你最终是否在5.0上使用了这些命令的组合?是的,我的设备已经root了。 - Punit Raizada我使用了以下设置来摆脱Android Marshmallow中的系统UI
final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE;
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_instructions);
getWindow().getDecorView().setSystemUiVisibility(flags);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
然后我添加了代码,如果用户在屏幕顶部或底部向上滑动,则隐藏返回键。
/* Hides Navigation bar again if user swipes it visible */
@Override
protected void onResume() {
getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
getWindow().getDecorView().setSystemUiVisibility(flags);
}
});
super.onResume();
Log.i(TAG,"Activity Life Cycle : onResume : MainActivity Resumed");
}
我曾经遇到过同样的问题。这段代码适用于4.4和Lollipop(已测试)。应该也适用于其他版本。
/**
* Uses Root access to enable and disable SystemUI.
* @param enabled Decide whether to enable or disable.
*/
public void setSystemUIEnabled(boolean enabled){
try {
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("pm " + (enabled ? "enable" : "disable")
+ " com.android.systemui\n");
os.writeBytes("exit\n");
os.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
当然需要root权限
我找到了另一种解决方案,它适用于Android 5.0
private void hideNavigationBar(){
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("pm disable com.android.systemui\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();
//////////////////////////////////////
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}