[英]How to lock android home button,recent app button and back button for kiosk mode in android 4.4?
[英]Android: Stop Back Button From Exiting LockTask / Kiosk Mode
我想實現一個KioskMode
,我只針對Android L
,因為這是一個非常具體的應用程序。
我已經完成了將我的應用程序設置為DeviceAdmin的過程,並且DevicePolicyManager.isLockTaskPermitted(this.getPackageName())
已經返回true
。
然后我通過startLockTask()
啟動一個LockTask
。
一切都很好,但當我按住backbutton
,應用程序仍然退出自助終端模式。
我已經覆蓋了onKeyPress
以顯示用於解鎖應用程序的自定義Dialog,但這並不妨礙android在用戶按下時自動退出我的鎖定任務。
我現在不知道該怎么做,並且會感謝每一個輸入。
我現在已經被覆蓋了
@Override
public boolean onKeyDown(int KeyCode, KeyEvent event)
{
if(KeyCode == KeyEvent.KEYCODE_BACK)
{
BackDownButtonPressed = true;
if(VolDownPressed)
showTaskLockDialog();
return true;
}
else if(KeyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
VolDownPressed = true;
if(BackDownButtonPressed)
showTaskLockDialog();
return true;
}
return super.onKeyDown(KeyCode, event);
}
@Override
public boolean onKeyUp(int KeyCode, KeyEvent event) {
if(KeyCode == KeyEvent.KEYCODE_BACK)
{
BackDownButtonPressed = false;
return true;
}
else if(KeyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
VolDownPressed = false;
return true;
}
return super.onKeyUp(KeyCode, event);
}
@Override
public void onBackPressed()
{
return;
}
@Override
public boolean onNavigateUp() {
return true;
}
@Override
public boolean dispatchKeyEvent (KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
return true;
}
return true;
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//do something or nothing in your case
return true;
}
return super.onKeyLongPress(keyCode, event);
}
為了記錄,我正在使用帶有Cyanogenmod CM12.1的三星SM-T700平板電腦
也許您需要覆蓋onKeyLongPress
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//do something or nothing in your case
return true
}
return super.onKeyLongPress(keyCode, event);
}
不確定它是否有用,但我在這里寫了一篇關於設置Kiosk模式的博客: http : //www.sureshjoshi.com/mobile/android-kiosk-mode-without-root/
並在此處編寫了示例代碼: https : //github.com/sureshjoshi/android-kiosk-example
不確定你的代碼和我的代碼之間是否存在任何重大差異,但我只是想在運行Android 5.0的三星Galaxy Tab 4上長按,它不會退出應用程序。
可能是與Cyanogen生根的東西嗎?
如果你的代碼中沒有這個,可以將其添加進去,看看是否有任何問題:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Remove title bar and notification bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
ComponentName deviceAdmin = new ComponentName(this, AdminReceiver.class);
mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
if (!mDpm.isAdminActive(deviceAdmin)) {
Toast.makeText(this, getString(R.string.not_device_admin), Toast.LENGTH_SHORT).show();
}
if (mDpm.isDeviceOwnerApp(getPackageName())) {
mDpm.setLockTaskPackages(deviceAdmin, new String[]{getPackageName()});
} else {
Toast.makeText(this, getString(R.string.not_device_owner), Toast.LENGTH_SHORT).show();
}
mDecorView = getWindow().getDecorView();
}
和
protected void enableKioskMode(boolean enabled) {
try {
if (enabled) {
if (mDpm.isLockTaskPermitted(this.getPackageName())) {
startLockTask();
mIsKioskEnabled = true;
} else {
Toast.makeText(this, getString(R.string.kiosk_not_permitted), Toast.LENGTH_SHORT).show();
}
} else {
stopLockTask();
mIsKioskEnabled = false;
}
} catch (Exception e) {
// TODO: Log and handle appropriately
}
}
只是為了結束這個話題..
到目前為止,我無法找到完美的解決方案。 我目前的解決方法是,如果用戶離開信息亭模式並再次進入信息亭模式,則會收到一個事件。
可悲的是,這給用戶留下了兩個說“屏幕未固定”和“屏幕固定”的祝酒詞,這是不幸的。 但這滿足了我目前的需求。
我有同樣的問題: 如何阻止“按住后退按鈕”逃脫Android 6+上的“鎖定任務模式”
該問題僅發生在我的Android 7平板電腦上。
在我的Android 6平板電腦上運行該應用修復了該問題。
你能添加一些代碼來說明你目前的解決方法嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.