簡體   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