3

我正在尝试用我自己的应用程序替换股票锁定屏幕。
在我的代码中,我想禁用主页按钮。
我知道如何在 Android 2.3 及更低版本中执行此操作,
但相同的代码不适用于 Android 4.0+(按下 Home 按钮时返回桌面)

最近我发现了一个名为 MiHome 的应用程序,它有自己的锁定屏幕并且能够禁用主页按钮。
有谁知道它是如何实现的???

4

3 回答 3

15

除非您将应用程序设为主屏幕,否则无法拦截 Android 上的主页按钮。这是出于安全原因,因此恶意应用程序无法通过覆盖所有可以退出的按钮来接管您的设备。主页按钮是能够离开任何应用程序的一种可靠方式。

如果要处理 HOME 按钮,请实现主屏幕。

于 2013-03-17T10:50:09.450 回答
3

出于安全/可靠性原因,在 ICS 中禁用了使用主页按钮进行操作。(大多数应用程序将其用于恶而不是善)

请参阅以下问题以了解解决方法。

  1. 如何禁用 android 4.0 主页按钮
  2. 覆盖android ICS中的Home键
  3. 在 Android ICS (4.0) 中禁用主页按钮

似乎唯一的方法是实现主屏幕

于 2013-03-17T10:10:47.087 回答
0

尝试这个

   params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,
                    PixelFormat.TRANSLUCENT);
            params.gravity = Gravity.TOP;

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            } else {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
    mOverlay = (RelativeLayout) inflater
                    .inflate(R.layout.main, (ViewGroup) null);

    mOverlay.setFitsSystemWindows(false);
            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
            mWindowManager = (WindowManager) context
                    .getSystemService(Context.WINDOW_SERVICE);
            mWindowManager.addView(mOverlay, params);
于 2016-01-27T07:10:30.310 回答