我正在开发一个零售应用程序,需要在循环播放视频全屏,并限制对设备本身的控制,以便客户无法关闭应用程序,设备被篡改等。
我已经研究过Android的沉浸式模式,但这只能让我走到一半。我需要能够基本上禁用软键和硬件导航键,以及防止状态栏下拉列表被打开。
我是否完全错过了沉浸式模式,使这成为可能,或者是否有任何黑客可以完成这项任务?谢谢。
答案 0 :(得分:0)
您可以尝试禁用硬件导航键(声音键,背面按键等),禁用背面按键和音量键。
禁用后退按钮
@Override
public void onBackPressed() {
// Leave it blank to disable it;
}
禁用声音键
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
if (action == KeyEvent.ACTION_UP) {
//do nothing
}
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (action == KeyEvent.ACTION_DOWN) {
//do nothing
}
return true;
default:
return super.dispatchKeyEvent(event);
}
}
禁用状态栏下拉列表
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
setContentView(R.layout.your_layout);
修改强>
要禁用状态下拉列表,请使用此method。这是覆盖状态栏并消耗所有输入事件。它可以防止状态扩大。
注意:
Android Manifest
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
customViewGroup实施
WindowManager manager = ((WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE));
WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
localLayoutParams.gravity = Gravity.TOP;
localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
// this is to enable the notification to recieve touch events
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
// Draws over status bar
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
localLayoutParams.height = (int) (50 * getResources()
.getDisplayMetrics().scaledDensity);
localLayoutParams.format = PixelFormat.TRANSPARENT;
customViewGroup view = new customViewGroup(this);
manager.addView(view, localLayoutParams);
禁用软键
禁用软键的最佳方法是固定应用(App Pinning)。最后以沉浸式模式创建应用程序。您还可以将应用设置为启动器。然后,当单击主页按钮时,将调用您的应用程序,保持您的应用程序处于打开状态。
为此,请添加两个类别。
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />