我一直在努力替换现有的 Car Home 应用程序,但我完全不知道如何覆盖主页按钮,以便在手机连接时将我的应用程序带回前台。汽车之家就是这样工作的,所以一定有办法。
BroadcastReceivers 似乎不起作用,因为每当按下主页按钮时广播的意图仍然会导致默认主屏幕应用程序启动;我无法阻止它。我可以从我的应用程序中覆盖主页按钮,但这对我没有好处,因为当用户在我的应用程序之外时这需要工作。 Car Home 也不会做任何奇怪的事情,比如在运行时将自己设置为默认主屏幕应用程序(我检查了 logcat 以确保)。
接下来我可以尝试什么?
好吧,几个月后我终于找到了这个问题的答案。关键是“android.dock_home”元数据元素,可在此处找到:
http://developer.android.com/reference/android/content/Intent.html#METADATA_DOCK_HOME
通过在你的 AndroidManifest.xml 中使用它,你可以让你的停靠应用程序暂时成为家庭应用程序。为此,将此行添加到停靠应用程序活动的活动标签内的 AndroidManifest.xml 中:
<meta-data android:name="android.dock_home" android:value="true" />
如果该值设置为 true,只要您的手机处于停靠状态,主页按钮就会将您返回到停靠应用程序。取消停靠后,主页按钮将带您回到正常的主页应用程序。
不幸的是,在没有用户确认的情况下,公共 API 无法覆盖主页按钮。
你最好的选择是实施一个
CATEGORY_HOME
意图。这意味着当用户按下 Home 时,他们将看到运行标准 Home 或你的选项,如果他们愿意,可以将你的设置为默认值。
当您的应用程序启动时,您可以检查手机是否已插接。如果手机未插接,您可以打开标准主屏幕并在显示任何内容之前关闭您的应用程序。
您需要在清单中设置正确的意图过滤器,以便应用程序在您连接手机时自动启动。有关信息,请参阅http://developer.android.com/reference/android/content/Intent.html#CATEGORY_CAR_DOCK。
我找到了解决 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 键将不再停留在同一屏幕上。