6

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

<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> 

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

我将非常感谢您的帮助!

+0

您的广播接收机在哪里定义? –

+0

@Jon Willis:Receiver在清单中定义。 CommonsWare和Gaurav已经解释了这个问题。感谢您的帮助! – Kacper86

回答

10

您是否正在运行Honeycomb 3.1或更高版本?如果是的话,看看here。 安装应用程序时,它处于停止状态。当应用程序首次启动时,它将被移出停止状态。

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

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

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

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

+0

非常感谢您的快速响应! – Kacper86

4

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

由于用户往往对没有任何活动的应用程序感到困惑,因此如果没有其他应用程序,您应该首先进行一项活动,以获得联机帮助。使用Android 3.1,这一点更为重要。

+0

非常感谢您的快速响应! – Kacper86