安卓:如何控制主页按钮?

4
我们正在尝试为我邻居的智力和身体残疾的女儿提供一个应用程序,让她可以使用Android平板电脑作为“说话人”,即她按下几个大按钮,设备就会生成语音。该应用程序基本上是一个WebView和一个额外的Javascript对象,用于执行和控制语音生成,以及一些处理方向变化的逻辑。对于她特定的说话项目布局,html文件是离线生成的。我们还添加了一些音乐播放和图片查看功能,使设备更具吸引力。
问题在于主页按钮会将她带回到Android启动器屏幕的混乱中,而在测试设备(Archos 70)上,主页按钮不是物理按钮,而是显示在触摸屏上,这样很容易意外点击它。
因此,我想通过按下序列home、back、home来仅返回到Android启动器,没有其他操作之间的干扰。
如果我将我的应用程序自身设置为启动器,我能实现这个吗?如何在home、back、home序列中返回到原始启动器?这似乎深入到Android的内部,是吗?
到目前为止,我发现的唯一线索是 Overriding Home button for a Car Home replacement app,但此方法评分为-1,并且仅在模拟器上工作。此外,我怀疑是否完全可以放弃原始启动器,否则将无法访问例如USB质量设备控制,以允许下载新的HTML文件,杀死和重新启动应用程序等。
我也愿意采用巧妙的方法。也许可以启动后台服务,根据需要再次将应用程序带到前台?

在你(我假设是)空闲时间承担一个令人钦佩的慈善项目,我为你点赞。 - Ben Siver
1
看看他们在toddler app上做了什么。替换启动器可能并不那么糟糕,因为可以有一个大屏幕区域将她带回应用程序的主要部分,以及一个小区域将平板电脑返回到正常模式。锁也可以设置得太难让她无意中打开。 - Dan S
https://dev59.com/9nI95IYBdhLWcg3wxA4- - ldog
好的,将以下内容添加到清单文件中:<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.HOME" / > - Wangnick
1
当按下主页按钮时,Android会询问是否将我的应用程序设置为标准主屏幕。回答“是”会使Talker固定在屏幕上。很好。更好的是,重新启动设备会自动启动Talker。现在如何在按下主页、返回、主页时返回原始启动器?请注意,我仍然可以使用adb shell pm uninstall com.wangnick.smalltalker来解除死锁状态。 - Wangnick
2个回答

4

主页按钮无法被覆盖。您可以编写一个响应主页意图的应用程序(这就是启动器的作用),但仅限于此。


我知道这个,但还没有尝试过。感谢你和丹的鼓励让我去尝试一下。现在,如何返回到原始启动器? - Wangnick

3
我可以通过将我的应用程序本身作为启动器来实现这一点吗?然后如何在 home、back、home 序列时返回到原始的启动器?这似乎深入到了Android的内部,是吗?
是的。不需要深入到内部。您可以通过指定组件手动启动一个启动器,注意这可能因设备和用户而异,如果您只是私下使用它,可以硬编码它,但如果您发布它,必须允许用户指定其真正的主页应用程序。
/* This should come from a preference that let's the user select an activity that can handle the HOME intent */
String packageName = "com.android.launcher";
String packageClass = "com.android.launcher2.Launcher";

Intent home_intent = new Intent(Intent.ACTION_MAIN);
home_intent.addCategory(Intent.CATEGORY_HOME);
home_intent.setComponent(new ComponentName(packageName, packageClass));
home_intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
/* Here you should catch the exception when the launcher has been uninstalled, and let the user save themselves by opening the Market or an app list or something. Users sometimes use root apps to uninstall the system launcher, so your fake launcher is all that is left. Might as well give the poor user a hand. */
startActivity(home_intent);

检测home/back/home键有点棘手,因为home键不会作为onKeyEvent出现,而是作为一个新的意图(intent)出现。简单地长按返回按钮,然后显示提示可能是一个安全/好的方法。

非常感谢,我明天会尝试这个(现在德国已经过了午夜)。请注意,home、back、home只是一个例子。搜索、返回、搜索、选项等也可以,而且可能比长按弹出窗口更好,因为那可能会让她感到困惑。 - Wangnick
确实很好用。谢谢。 - Wangnick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接