我正在为android平板电脑开发一个应用程序。
这个平板电脑将展示给公众,他们可以触摸它。
我想阻止所有关闭应用程序的方法,除了需要密码的按钮/首选项菜单。
但是经过一些研究,我不确定这是否可能。长按电源键仍然有效,home键和返回键也是如此。这能行吗?如果有,那是怎么回事?
你可以在stackoverflow中找到所有已经问过的问题的答案
Home键
返回按钮
电源按钮
首先你需要将你的应用程序从manifest中添加为home
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.settings.SETTINGS" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
after add flag
getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY); //(dont forget to add flag before `setContentView`)
禁用设备锁定
private void disableLock() {
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(MainActivity.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
}
禁用home长按
@Override
protected void onUserLeaveHint() {
startActivity(new Intent(MainActivity.this,MainActivity.class));
finish();
super.onUserLeaveHint();
}
运行后,你需要将应用程序设置为home应用程序!!
我很确定,如果没有root权限,为了避免一个流氓应用程序控制你的Android设备,如果你碰巧运行它。
我终于找到了一种方法来做到这一点
No doc about this
getWindow () .getDecorView () .setSystemUiVisibility (8);
但是8是一个隐藏的标志,完全禁用系统UI与此您的应用程序是永久全屏(要小心,如果你使用这个保持关闭应用程序的方式)8标志是完全没有记录的,所以我不能告诉你,因为这个版本是在4.0和4.1开发的,它对两者都有效。不知道3.0,但没有任何设备可以尝试。
别忘了android.permission。EXPAND_STATUS_BAR
这是不完美的,因为如果你使用一些警告对话框,系统ui变得可见,但如果你不使用任何你不能退出
长按电源使弹出窗口显示系统ui但是你可以用下面的方法快速消灭它
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(!hasFocus) {
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
}
}
如果你这样做,你就不能退出你的应用程序了(或者我已经忘记了关闭它的方法?)所以记住之前要做一些像SureLock(应用程序在playstore上可用),3touch在2秒内启动一个活动谁要求通行证退出它
希望这能帮助到你,并且是完整的
最后一个问题仍然没有答案我们是否可以自定义一个警报视图来调用setSystemUiVisibility(8);因为如果电池发出警报或者如果你认为你真的需要一个警报,当警报可见时,这个会显示系统UI
你不能这么做,你不能阻止用户按下Home Button
您可以阻止回按事件。
你可以使用onAttachedToWindow()
来阻止用户按home键,但这可能在android 3.2中不起作用