【问题标题】:How to disable back,home,multitask physical buttons?如何禁用返回、主页、多任务物理按钮?
【发布时间】:2018-06-06 12:21:06
【问题描述】:

实际上我正在开发一个应用程序,应该在安装的设备上打开这个应用程序,这样我就可以阻止/禁用返回、主页、多任务的物理按钮。

我已经阅读了一些关于如何做到这一点的文章,但仍然无法在我的应用中实现它。

我要禁用的按钮如下,您可以在照片上看到

【问题讨论】:

  • 向我们展示你的代码,你卡在哪里了?
  • 其实我一直在关注这个guide,但我不知道如何实现 onKeyDown 方法

标签: android button android-homebutton


【解决方案1】:

//只要把下面的代码放在onStart()方法上

@Override
    protected void onStart() {
        super.onStart();
        // start lock task mode if it's not already active
        ActivityManager am = (ActivityManager) getSystemService(
                Context.ACTIVITY_SERVICE);
        // ActivityManager.getLockTaskModeState api is not available in pre-M.
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            if (!am.isInLockTaskMode()) {
                startLockTask();
            }
        } else {
            if (am.getLockTaskModeState() ==
                    ActivityManager.LOCK_TASK_MODE_NONE) {
                startLockTask();
            }
        }


    }

【讨论】:

  • 这是一个很好的解决方案,但它给了我很多烦人的 Toast,而且当我打开应用程序时说“这个屏幕被阻止等等......”我可以禁用所有这些东西吗?
  • 调用startLockTask()时,系统会询问用户是否允许进入pinning模式。
  • 是的,我已经注意到了,但我正在寻找一些不允许用户决定是否阻止它的东西:l 但无论如何,如果我没有发现任何其他不好用的东西这个方法
  • @akansha06jain 虽然回答问题很棒,但如果你解释一下你的代码做了什么,它将使未来的用户受益。添加一些关于代码的相关信息。
  • 您需要专用设备吗?如果是,您应该查看本指南developer.android.com/work/cosu#java。使用设备策略控制器并将您的包列入白名单,如果您调用 startLocktask(),则不会显示“烦人”弹出窗口
【解决方案2】:

对于back button,您可以使用Override onBackPressed 方法如下:-

@Override
public void onBackPressed() {
    // do what you want
}

Home Button

@Override
public void onAttachedToWindow() {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}

对于禁用recent app 按钮:-

第 1 步

将此权限添加到manifest.xml 文件

<uses-permission android:name="android.permission.REORDER_TASKS" />

第 2 步

将此代码放在您想要阻止/禁用最近使用的应用按钮

的任何Activity中
 @Override
protected void onPause() {
    super.onPause();

    ActivityManager activityManager = (ActivityManager) getApplicationContext()
            .getSystemService(Context.ACTIVITY_SERVICE);

    activityManager.moveTaskToFront(getTaskId(), 0);
}

【讨论】:

  • Canno't resolve method TYPE_KEYGUARD while with TYPE_KEYGUARD_DIALOG 应用程序崩溃并出现以下错误:添加窗口后无法更改窗口类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多