Android - 是否可以禁用主页按钮的单击

时间:2010-01-29 13:27:57

标签: android android-widget

我有一个应用程序,当它启动时我必须禁用Android设备上的所有按钮,我成功禁用了结束通话等。我需要禁用主页按钮单击。它不应该对点击产生任何动作。

高度赞赏任何建议

6 个答案:

答案 0 :(得分:29)

我非常确定Toddler Lock只使用BroadcastReciever并侦听Intent.ACTION_MAIN和类别Intent.CATEGORY_HOME - 这就是为什么当你第一次启动它时,它会告诉你检查“使用此应用程序为默认“框,让您选择幼儿锁。

所以,它根本没有真正阻止Home按钮,它只是将自己设置为默认的广播接收器:

Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);

当您启动Toddler Lock时,它可能会设置内部标记,如果您按下主页按钮,它只会将窗口置于前面。如果未设置该标志,则可能会显式启动Launcher。

我希望这是有道理的。这只是一个理论,但我几乎100%确定它是如何完成的。

答案 1 :(得分:18)

将以下代码添加到您的活动中:

@override

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

修改

这适用于所有旧版本的android。但是ICS和果冻豆中的无法正常工作会让你在应用中崩溃

What does this 4 line java code means in android application?

答案 2 :(得分:11)

将此内容添加到您的主要活动的manifest.xml中:

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />

HOME按钮将始终(重新)启动您的活动。 在Froyo工作。

答案 3 :(得分:5)

我找到了解决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"/>

现在你的应用程序是一个备用的Launcher应用程序。

使用adb,并使用包管理器

禁用启动器应用程序
pm disable com.android.launcher2

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

答案 4 :(得分:5)

here您可以在主页上找到我的Android示例应用程序。 主页,后退,通话,电源按钮被禁用。 用户只能通过输入密码来结束应用程序。

答案 5 :(得分:2)

Jeffreys帖子的另一个补充,这里有一些对我有用的东西(并且仍然允许半透明的主题)

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

因为它会让键盘出现,你也可以在应用程序使用时禁用键盘锁:

KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();

这非常适合制作自己的键盘锁。