我有一个应用程序,当它启动时,我需要在Android设备上禁用所有按钮,我已经成功禁用了挂断和其他按钮。我现在需要禁用 HOME 按钮的点击操作,点击 HOME 按钮不应该产生任何作用。
非常感谢任何建议。
我有一个应用程序,当它启动时,我需要在Android设备上禁用所有按钮,我已经成功禁用了挂断和其他按钮。我现在需要禁用 HOME 按钮的点击操作,点击 HOME 按钮不应该产生任何作用。
非常感谢任何建议。
我非常确定Toddler Lock只是使用BroadcastReciever并侦听Intent.ACTION_MAIN
和类别Intent.CATEGORY_HOME
- 这就是为什么当您第一次启动它时,它会告诉您要勾选“将此应用程序用作默认值”框,并让您选择幼儿锁的原因。
因此,它实际上根本没有阻止Home按钮,它只是将自己设置为以下内容的默认广播接收器:
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
当你启动幼儿锁时,它可能会设置一个内部标志。如果你按下主屏幕按钮,它只是将窗口置于前台。如果该标志未设置,则可能会显式地启动启动器。
我希望这样说有意义。这只是一个理论,但我几乎可以确定这就是实现方式。
在你的活动中添加以下代码:
@override
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
编辑:
这在所有旧版本的Android中都有效。 但不会在ICS
和jelly bean中工作,并且会导致应用程序崩溃。
将以下代码添加到您的主Activity的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。
我找到了解决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键将始终停留在同一屏幕上。
这里你可以找到我的Android示例应用程序,它持续存在于主页上。 Home、Back、Call、Power按钮都被禁用了。 用户只能通过输入密码来结束应用程序。
@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();
这对于制作自己的键盘锁应用程序非常有效。