4

我们正在尝试为我邻居的精神和身体残疾的女儿提供一个应用程序,让她使用 Android 平板电脑作为说话者,即,她按下几个大按钮,设备就会生成语音。该应用程序基本上是一个 WebView 和一个附加的 Javascript 对象,用于执行和控制语音生成,以及一些处理方向变化的逻辑。Html 文件是针对她的谈话项目的特定布局离线生成的。我们还添加了一些音乐播放和图片查看功能,以使设备对她更具吸引力。

问题是 Home 键让她回到了 Android 启动器屏幕的疯狂状态,而在测试设备 (Archos 70) 上,home 键不是物理按钮而是显示在触摸屏本身上,这太容易了不小心撞到了。

因此,我只想通过按 home、back、home 序列返回 Android 启动器,中间没有其他操作。

我可以通过使我的应用程序本身成为启动器来实现这一点吗?然后我怎样才能在 home、back、home 序列上回到原来的启动器?这似乎深入到了 Android 的内部,对吧?

到目前为止,我发现的唯一线索是Overriding Home button for a Car Home replacement app,但它的评级为 -1,并且据报道只能在模拟器中工作。我也怀疑我是否可以完全放弃原来的启动器,否则将无法再访问例如 USB 大容量设备控件以允许下载新的 HTML 文件、杀死并重新启动应用程序等等。

我也愿意去拼凑。也许可以启动一个后台服务,在必要时将应用程序再次带到前台?

4

2 回答 2

4

主页按钮不能被覆盖。您可以编写一个响应主页意图的应用程序(这就是启动器所做的),仅此而已。

于 2011-07-26T21:41:24.903 回答
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 出现,而​​是作为新意图出现。只需长按后退按钮然后显示提示可能是一种安全/好的方法。

于 2011-07-26T22:30:56.780 回答