5

我有两个可以完全控制的应用程序。两者都使用相同的证书签名,并且都使用完全相同的意图过滤器。一个从片段发送广播,另一个假设接收它并做某事。然而,这不起作用:

Strings.FILTER_INIT_REGISTER = "com.app.FILTER_INIT_REGISTER"

Intent intent = new Intent(Strings.FILTER_INIT_REGISTER);
getActivity().sendBroadcast(intent);

我已经在包含 ReportingReceiver 类的应用程序的清单应用程序标记中注册了接收器:

<receiver             
    android:name=".receivers.ReportingReceiver"
    android:exported="true"
    >
        <intent-filter>
            <action android:name="com.app.FILTER_INIT_REGISTER" />
            <category android:name="android.intent.category.DEFAULT" />                
        </intent-filter>
</receiver>

好奇为什么 ReportingReceiver 类没有收到意图调用?

4

2 回答 2

14

如果您的应用程序只有一个服务和接收器,那么这在 Android 3.1 及更高版本中将不起作用。原因是系统不会向处于STOPPED STATE的应用程序发送广播 Intent 。应用程序在首次安装时处于STOPPED 状态。当用户第一次手动启动应用程序时,它会从STOPPED 状态中移除。如果用户强制应用程序停止使用应用程序管理器工具,则返回到STOPPED 状态。

由于您的应用程序没有活动,因此用户无法“启动”它。因此它永远不会脱离停止状态。

请参阅http://developer.android.com/about/versions/android-3.1.html#launchcontrols

于 2012-10-10T22:34:29.430 回答
7

正如 Android Addict 在他对 David Wasser 回答的评论中所说的那样......有一种方法可以解决这种行为。

只需将以下标志添加到调用意图。这将确保您也可以从“停止”的应用程序中访问广播接收器。

http://developer.android.com/reference/android/content/Intent.html#FLAG_INCLUDE_STOPPED_PACKAGES

您可以在此处阅读有关此 Android 3.1 更改的更多信息

http://developer.android.com/about/versions/android-3.1.html#launchcontrols

和这里

http://code.google.com/p/android/issues/detail?id=18225

于 2012-11-14T12:04:05.803 回答