我正在开发一个学校的Android应用程序,我希望这个应用程序在打开时防止用户在设备上做任何事情,除了我在我的应用程序中提供的内容,我的意思是做 NOTHING 其他。 .. 所以首先应该禁用并隐藏导航栏
我看到了这个,但它的4.4+并没有解决问题,因为如果你刷屏幕,你将得到菜单。 (How to hide navigation bar permanently in android activity?)
这也不起作用(Permanently hide navigation bar on activity)(Is there a way to hide the system/navigation bar in Android ICS) 我还尝试使用onKeyDown禁用导航栏操作,但它不适用于所有键。
另外我想删除通知栏,让用户访问设备的设置和其他东西。
这也不起作用(Disable the notification panel from being pulled down)如此链接中提到的它没有解决它,它只是在显示它后隐藏它:S
帮助将不胜感激,
感谢。
答案 0 :(得分:4)
您可以使用提到的屏幕固定功能here在Android 5.0中获得自助服务终端类型模式:
Android 5.0引入了一个新的屏幕固定API,可以让你 暂时限制用户离开任务或被中断 通过通知。例如,如果你这样做,可以使用它 开发教育应用程序以支持高风险评估 Android或单一用途或信息亭应用程序的要求。 一旦您的应用激活屏幕固定,用户就看不到了 通知,访问其他应用程序或返回主屏幕,直到 您的应用退出模式。
您可以将设备锁定为自助服务终端。导航栏未隐藏,但可以删除或禁用主页和最近按钮,具体取决于您激活模式的方式。我在测试了这个功能here之后写了一些信息。
答案 1 :(得分:2)
要禁用状态通知栏:
您需要在通知栏顶部放置一个视图,以便我们将触摸事件劫持到状态通知栏。不用多说,这里是代码:
mView= new TextView(this);
mView.setText(".........................................................................");
mLP = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
100,
// Allows the view to be on top of the StatusBar
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
// Keeps the button presses from going to the background window
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
// Enables the notification to recieve touch events
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
// Draws over status bar
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT);
mLP.gravity = Gravity.TOP|Gravity.CENTER;
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mView, mLP);
由于您使用的是系统覆盖窗口,因此需要权限:
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
注意:
不要让你的应用程序全屏,因为支持沉浸式模式的17以上版本将会破坏这种方法。
答案 2 :(得分:1)
您无法在Android中停用系统或通知面板。
您可以隐藏这些元素(就像您已经发现的那样),但目前,您无法永久禁用它们。
您正在寻找一种“Kiosk模式”&#39;这是不受支持的。
与您正在寻找的最接近的是“沉浸式模式”&#39; (details) - 但这不会永久隐藏设置或导航控件。