6

我有一个没有启动器活动的应用程序,它从 Android 1.5 到 Android 2.3.4 都可以正常工作。它是由我的广播接收器启动的。但是,在 Honeycomb(摩托罗拉 Xoom)上,我的广播接收器根本不起作用(它没有捕捉到任何意图)。如果我将启动器活动添加到我的清单:

<activity android:label="@string/app_name" android:name="com.myapp.MainActivity"> 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 
</activity>

然后我的应用程序正常工作(广播接收器捕获所有必要的意图并启动我的服务)。

我将非常感谢您的帮助!

4

2 回答 2

10

您运行的是 Honeycomb 3.1 或更高版本吗?如果是,请看这里。安装您的应用程序后,它处于停止状态。首次启动应用程序时,它会脱离停止状态。

所有广播意图都不会启动处于停止状态的应用程序。如果广播意图的发送者也想启动停止的应用程序,它必须指定Intent.FLAG_INCLUDE_STOPPED_PACKAGES标志。

Intent intent = new Intent(MY_INTENT_ACTION);
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(intent);

如果您无法更改发送意图的代码,最好的办法是保持启动器活动。每当用户在安装后启动您的应用程序时,它将从停止状态移出,您将开始接收广播。

请注意,用户可以将您的应用程序从设备设置中的管理应用程序移回停止状态。

于 2011-09-08T15:00:38.120 回答
4

在 Android 3.1 及更高版本上,BroadcastReceivers在用户通过其他方式(例如启动活动)至少启动一次应用程序之前不会调用。

由于用户往往会对没有活动的应用程序感到非常困惑,因此您真的应该首先拥有活动,如果没有别的,请寻求在线帮助。对于 Android 3.1,这一点更为重要。

于 2011-09-08T14:59:44.297 回答