Android - [Xoom/Honeycomb] 应用程序没有 LAUNCHER 活动不起作用

6

我有一个没有启动器活动的应用程序,从Android 1.5到Android 2.3.4都可以正常工作。它由我的广播接收器启动。然而,在Honeycomb(Motorola 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>

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

你的广播接收器在哪里定义的? - Jon Willis
@Jon Willis:接收器已在清单中定义。CommonsWare和Gaurav已经解释了问题。感谢您的帮助! - Kacper86
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);

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

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


4
在Android 3.1及以上版本中,只有在用户通过其他方式启动应用程序(例如启动活动)至少一次后,才会调用BroadcastReceivers。由于用户往往对没有活动的应用程序感到非常困惑,因此您应该首先拥有一个活动,即使只是为了在线帮助。在Android 3.1中,这更加重要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接