61

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

任何建议高度赞赏

4

6 回答 6

29

我很确定 Toddler Lock 只使用 BroadcastReciever 并监听Intent.ACTION_MAIN类别Intent.CATEGORY_HOME- 这就是为什么当您第一次启动它时,它会告诉您选中“将此应用程序用作默认设置”框,并让您选择 toddler lock。

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

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

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

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

于 2010-04-16T01:19:53.857 回答
18

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

@override

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

编辑:

这适用于所有旧版本的android。但是在果冻豆中不起作用ICS并且会让您在应用程序中崩溃

这 4 行 java 代码在 android 应用程序中意味着什么?

于 2011-06-16T05:19:02.327 回答
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 按钮将始终(重新)启动您的活动。在弗罗约工作。

于 2011-06-21T15:11:21.917 回答
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"/>

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

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

pm disable com.android.launcher2

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

于 2010-12-27T11:50:10.307 回答
5

在这里,您可以找到我的 Android 示例应用程序,它保留在主页上。主页、返回、通话、电源按钮被禁用。用户只能通过输入密码来结束应用程序。

于 2012-04-30T08:22:03.920 回答
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();

这非常适合制作您自己的键盘保护应用程序。

于 2011-09-05T23:52:35.167 回答