无法在ICS中接收广播

时间:2012-03-14 03:30:46

标签: android broadcastreceiver android-3.0-honeycomb android-4.0-ice-cream-sandwich

我为Android 4.0编写了1个应用程序,它是通过broadcastreceiver启动的。我的代码如下:

在AndroidManifest.xml中:

 <uses-permission android:name="android.permission.INTERNET" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <receiver android:name="com.Android.Exercise.StartUpReceiver"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <!--<action android:name="StartInstrument" /> 
                <action android:name="PrintControlName" />      -->     
            </intent-filter>
        </receiver>         
        <service android:enabled="true" android:name="StartAUT_Service">
            <intent-filter>
                <action android:name="com.Android.Exercise.StartAUT_Service" />
            </intent-filter>
        </service>  
    </application>

在StartUpReceiver类中:

public class StartUpReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {

        Log.i("Broadcast", "onReceive");

        Intent i = null;

        if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
             i = new Intent(context, StartAUT_Service.class);          
             i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }

        context.startService(i);            
    }       
}

重新启动设备后,我无法接收广播。 请帮助我,非常感谢

3 个答案:

答案 0 :(得分:7)

从Android 3.0开始,引入了应用程序状态。 所有应用程序现在都安装了状态设置为非活动状态,使其所有的BroadcastReceivers都处于非活动状态。

要使状态处于活动状态,用户必须至少启动一次应用程序,操作系统将自动激活应用程序及其所有BroadcastReceivers。

在您的情况下,您需要添加活动,无论是许可协议还是帮助页面。这将为您的应用创建一个图标,供用户点击并激活该应用。

请注意,如果用户强制关闭应用程序,应用程序的状态将设置为非活动状态。

我遇到了类似的问题:Android ICS not receiving data sms

我希望能解决您的问题,或者至少让您走上正轨。

的问候, 艾哈迈德

答案 1 :(得分:1)

尝试

 <uses-permission android:name="android.intent.action.BOOT_COMPLETED" />

低于互联网使用权限

答案 2 :(得分:0)

您需要执行以下操作来克服this安全功能。

如果您的API级别低于12,请在广播之前将以下内容设置为您的意图:

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 32);

否则,添加以下标志以包括标记为已停止的包:

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent. FLAG_INCLUDE_STOPPED_PACKAGES);