在广播接收器中处理 android.intent.category.HOME

Process android.intent.category.HOME in a Broadcast Receiver

我正在尝试找到一种方法来在按下主页按钮时发送另一个自定义意图的广播接收器中处理 android.intent.category.HOME。

在这一点上,我只设法添加一个 Activity 作为 Google Now Launcher 的替代品,方法是将其添加到清单中:

       <intent-filter>
            <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.LAUNCHER" />
        </intent-filter>

但我不想更改默认的 Home 应用程序,我只是想让 Google 现在 Launcher 做它的事情并且也被告知事件,但似乎如果我的应用程序是未标记为 LAUNCHER 我无法接收 action:MAIN 和 category:HOME 的广播。

你能帮我找到解决办法吗?

Android 中的 Intent 系统作为准消息总线运行。该总线上有三个独立通道:

  • 一个通道用于启动活动,例如当用户按下主页按钮时
  • 一个通道用于启动或绑定服务
  • 一个频道用于广播

发起消息的应用程序是选择频道的应用程序,而不是作为潜在收件人的您。在系统级别,按 HOME 会触发 startActivity() 调用以调出主屏幕。您不能自行决定 startActivity() 应该触发广播还是启动服务。

it seems that if my APP is not marked as a LAUNCHER I am not able to receive the broadcast with action:MAIN and category:HOME

即使您的 activity 是 "marked as a LAUNCHER",您也无法在 BroadcastReceiver 中收到 MAIN/HOME 的消息,因为 HOME按钮启动 activity.