繁体   English   中英

Android:停止退出按钮退出LockTask / Kiosk模式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM