【问题标题】:Android - Is It possible to disable the click of home buttonAndroid - 是否可以禁用单击主页按钮
【发布时间】:2011-01-10 20:32:16
【问题描述】:

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

任何建议都非常感谢

【问题讨论】:

  • 是的,我同意你的 cmets,但我的要求是真正的,因为应用程序有一些默认的事情要做,我说智能共享我的手机,就像我把手机交给我的孩子一样只需单击一下即可在我的应用程序中执行任何操作,未经我的许可,不应终止应用程序,您必须提供终止应用程序的身份验证。
  • 幼儿锁就是一个很好的例子。
  • @Jay Askren,是的,这是一个很好的例子,你对代码提示有什么想法吗?
  • 不幸的是我没有。对不起。
  • @JohnFeminella:好吧,您正在考虑在个人设备上使用 Android,但是您不希望用户在选项上徘徊而只使用一个应用程序的企业设备呢?

标签: android android-widget


【解决方案1】:

我很确定 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% 确定它是如何完成的。

【讨论】:

  • 很抱歉对这个旧版本发表评论,但只是为了纠正一些混淆——您无法通过广播接收器接收startActivity()Intents。但是,另一个活动可以将自己声明为 HOME 活动,这将允许用户在按下 HOME 按钮时选择主屏幕实现。
【解决方案2】:

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

@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?

【讨论】:

  • 虽然这可以禁用主页按钮,但在我的情况下,它会在我的活动顶部显示锁定屏幕。我正在尝试更换锁屏,因此我需要禁用主页按钮
  • 有趣的@Josh 你在用什么手机,在一个令人难以置信的机器人上,咏叹调。还有什么操作系统,这里是 2.2
  • 我在我的 Thunderbolt 上进行了测试,它已植根于运行 CM7 (2.3.4)。
  • 在运行 3.1 的 Acer 平板电脑上工作
  • 幸运的是,这个安全漏洞已在较新版本的 Android 中得到修复。
【解决方案3】:

在你的 manifest.xml 中为你的主要活动添加这个:

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

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

【讨论】:

  • 我给 +1 是因为它阻止退出,但它要求我选择我的应用程序是否是默认启动器?宏碁平板 3.1
  • 这是一个糟糕的解决方案,它只是将您的应用程序标记为启动器。人们可能会错误地使用您的应用切换默认启动器。你不想这样。
【解决方案4】:

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

【讨论】:

  • "用户在完成此应用程序后必须选择默认的家庭管理器。" - 如果您只想禁用您自己的应用程序的按钮而不弄乱启动器,则不是很有用。
  • 最好将相关代码粘贴到答案中,而不是让人们打开 zip 并搜索代码。
  • 不相关的答案..这个应用程序搞乱了主页启动器按钮
【解决方案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 键按下将始终保持在同一屏幕上。

【讨论】:

  • 我知道这是一个非常古老的问题,但为什么这与运行时环境问题有关?我不确定您是否可以以编程方式禁用启动器(如果可以的话,我会感到惊讶)甚至应该。
  • 这个答案似乎没有帮助,对不起
  • 其实可以,但是需要系统权限。而不是 adb 禁用默认启动器。也可以在code 上完成。
  • 这个 cmd 'pm disable com.android.launcher2' 是错误的:错误:java.lang.IllegalArgumentException:未知包:com.android.launcher。
【解决方案6】:

对 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();

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

【讨论】:

  • 嗨,这对我的问题似乎很有用。你能帮我解决一下stackoverflow.com/questions/10800683/… 吗?
  • 这有一个副作用。我的活动应该占据全屏。使用上面的代码会将其恢复为正常的屏幕尺寸,从而暴露 Android 的状态栏,从而打开一个安全漏洞,因为任何用户都可以通过状态栏访问应用程序的其他部分。
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多