我有一个应用程序,当它启动时我必须禁用Android设备上的所有按钮,我成功禁用了结束通话等。我需要禁用主页按钮单击。它不应该对点击产生任何动作。
高度赞赏任何建议
答案 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();
这非常适合制作自己的键盘锁。