【问题标题】:How to disable the home key如何禁用主页键
【发布时间】:2011-04-23 08:51:15
【问题描述】:

我想锁定屏幕。我想禁用主页键,只使用返回键。我该如何做到这一点?

【问题讨论】:

标签: android android-homebutton


【解决方案1】:

使用此方法禁用android中的Home键

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

【讨论】:

  • 这是否适用于全屏 SurfaceView 和 MediaPlayer?好像没有。哦,我明白了:在这种情况下 TYPE_KEYGUARD_DIALOG 有效。
  • 用户仍然可以向下滑动通知栏...一旦通知栏向下,他们可以点击主页,它会起作用。
  • 通知栏仍然显示,并且在将通知栏放下后,按主页键返回主屏幕。有什么解决办法吗? Theme.Black.NoTitleBar 和 requestWindowFeature(Window.FEATURE_NO_TITLE) 不起作用。
  • 它抛出了非法状态异常
  • 这似乎不适用于现代 Android 版本。它会抛出一个异常,即添加后无法更改窗口的类型。
【解决方案2】:

我找到了解决 HOME 键的方法。 对于您的应用程序,将清单设置为

<action android:name="android.intent.action.MAIN" />              
<category android:name="android.intent.category.HOME" />                 
<category android:name="android.intent.category.DEFAULT" />               
<category android:name="android.intent.category.MONKEY"/>

现在您的应用程序是备用启动器应用程序。

使用 adb,并使用包管理器禁用启动器应用程序

pm disable com.android.launcher2

现在 Home 键按下将始终保持在同一屏幕上。

【讨论】:

  • pm disable com.android.launcher2 应该是 pm disable com.android.launcher
  • @kakopappa 不再使用包启动器。包是launcher2。检查 Git 中的代码
  • 我是这样尝试的,但我不知道该怎么做?请您给我源代码以获取更多详细信息。谢谢。
  • 您好,我只想禁用主页键而不是返回键。如何实现?
  • 我已将上述属性添加到清单文件中的活动中,但即使我已将我的应用程序设置为默认主屏幕,主页按钮仍会将我带到启动器主屏幕。我该怎么办?
【解决方案3】:

此解决方案仅适用于 3.x。

好的,这应该是一个难题。但这里有一种破解方法。

在您的 Activity 中覆盖以下方法,

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

现在像这样处理关键事件,

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
   if(keyCode == KeyEvent.KEYCODE_HOME)
    {
     Log.i("Home Button","Clicked");
    }
   if(keyCode==KeyEvent.KEYCODE_BACK)
   {
        finish();
   }
 return false;
}

【讨论】:

  • 理想情况下.. KEYCODE_HOME 永远不会返回给任何应用程序。
  • 我的应用程序因此崩溃:java.lang.IllegalArgumentException: 添加窗口后无法更改窗口类型。
  • ...我将 setType() 调用从 onAttached 移至 onCreate -- 现在没有崩溃,但主页按钮没有被禁用。
  • 即使api级别设置为ICS下?
【解决方案4】:

将此代码添加到您的 MainActivity 类中:

Timer timer;
MyTimerTask myTimerTask;

@Override
protected void onResume() {
    super.onResume();

    if (timer != null) {
        timer.cancel();
        timer = null;
    }
}

@Override
protected void onPause()
{
    if (timer == null) {
        myTimerTask = new MyTimerTask();
        timer = new Timer();
        timer.schedule(myTimerTask, 100, 100);
    }

    super.onPause();
}

private void bringApplicationToFront()
{
    KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    if( myKeyManager.inKeyguardRestrictedInputMode())
        return;

    Log.d("TAG", "====Bringging Application to Front====");

    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    try
    {
        pendingIntent.send();
    }
    catch (PendingIntent.CanceledException e)
    {
        e.printStackTrace();
    }
}

public void onBackPressed() {
    // do not call super onBackPressed.
}

class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        bringApplicationToFront();
    }
}

这不是锁定“主页”按钮,但用户无法长时间(超过 100 毫秒)切换到另一个应用程序,也许这就是你想要的。

【讨论】:

  • 避免闪烁将这一行timer.schedule(myTimerTask, 100, 100);改为timer.schedule(myTimerTask, 1, 100);
【解决方案5】:

要禁用主页按钮,请尝试以下操作:

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

通知栏下拉的问题可以通过隐藏通知栏来解决:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.xxxx);
    getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN);
    ....
}

或在清单中为您的活动或应用程序设置全屏主题:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多