首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何像锁屏应用程序一样在Android中禁用主页按钮?

如何像锁屏应用程序一样在Android中禁用主页按钮?
EN

Stack Overflow用户
提问于 2016-04-03 16:45:36
回答 4查看 27.3K关注 0票数 17

我知道这个问题被问了很多次,但我发现所有的解决方案都不起作用。我尝试了下面给出的代码...

代码语言:javascript
复制
   protected void onPause() {
   super.onPause();
    Intent intent = new Intent(this,LockActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT |Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    }

它所做的是,当android主屏幕启动时,它将当前活动再次带到前面,但当主屏幕启动时,它几乎需要3-4秒才能将活动带到前面。

我已经使用了一些锁屏应用程序,当点击主页按钮时,它们甚至不会启动主屏幕。我想要实现这样的事情。

我也用过onUserLeavesHint方法、onKeyDown方法和onKeyDispatch方法,但它们都不适合我。

请不要回答或评论,因为这是不可能禁用主页按钮在安卓。对于这样的答案或评论,我建议你通过PlayStore上的一些锁屏应用程序。此外,我在github上找到了一个可以正常工作的应用程序以及源代码。它在我的手机上工作,应用程序使用disableKeyguard,但当我在我的应用程序中做同样的事情时,它不起作用(disableKeyguard被弃用,但我使用@supress警告(“弃用”))。

EN

回答 4

Stack Overflow用户

发布于 2016-04-12 14:45:47

来源- https://github.com/shaobin0604/Android-HomeKey-Locker

代码语言:javascript
复制
//Copy this class
public class HomeKeyLocker {
    private OverlayDialog mOverlayDialog;
    public void lock(Activity activity) {
        if (mOverlayDialog == null) {
            mOverlayDialog = new OverlayDialog(activity);
            mOverlayDialog.show();
        }
    }
    public void unlock() {
        if (mOverlayDialog != null) {
            mOverlayDialog.dismiss();
            mOverlayDialog = null;
        }
    }
    private static class OverlayDialog extends AlertDialog {

        public OverlayDialog(Activity activity) {
            super(activity, R.style.OverlayDialog);
            WindowManager.LayoutParams params = getWindow().getAttributes();
            params.type =  WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
            params.dimAmount = 0.0F; // transparent
            params.width = 0;
            params.height = 0;
            params.gravity = Gravity.BOTTOM;
            getWindow().setAttributes(params);
            getWindow().setFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |  WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 0xffffff);
            setOwnerActivity(activity);
            setCancelable(false);
        }

        public final boolean dispatchTouchEvent(MotionEvent motionevent) {
            return true;
        }

        protected final void onCreate(Bundle bundle) {
            super.onCreate(bundle);
            FrameLayout framelayout = new FrameLayout(getContext());
            framelayout.setBackgroundColor(0);
            setContentView(framelayout);
        }
    }
}

//Paste this in your activity
mHomeKeyLocker = new HomeKeyLocker();
mHomeKeyLocker.lock(this);
票数 7
EN

Stack Overflow用户

发布于 2016-04-12 03:20:34

您可以使用shaobin0604 library来完成此操作。它还会禁用后退按钮。您的活动将如下所示:

代码语言:javascript
复制
public class MainActivity extends Activity {

HomeKeyLocker homeKeyLocker;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    homeKeyLocker = new HomeKeyLocker();
    homeKeyLocker.lock(this);
}


}
票数 3
EN

Stack Overflow用户

发布于 2016-04-05 17:09:59

对你的问题的简单回答是你不能这样做。

你提到的解决方案是我大约四年前提出的, [Link]

onUserLeavesHint、onKeyDown和onKeyDispatch永远不会“禁用”硬件密钥。

如果你真的想“处理”Home按钮,你必须将你的应用程序作为主屏幕。参见thisthis

如果你真的想在不创建主屏幕应用程序的情况下禁用你的硬件密钥,你应该根你的设备,并从内核模块中删除相应的设备文件。(尝试的风险自负!)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36383357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档