BroadcastReceiver未收到BOOT_COMPLETED的通知

时间:2013-05-19 21:39:54

标签: android android-intent service boot

我正在尝试将一个只在“启动”上发出通知的服务组合在一起,然后在服务运行后再发布另一个服务。我正在使用以下内容作为我的清单:

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.project"
    android:versionCode="1"
    android:versionName="1.0"
>

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17"
    />

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
    >

        <service
            android:name=".Manager"
        />

        <receiver
            android:name=".Bootstrap"
        >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter> 
        </receiver>

    </application>

</manifest>

不幸的是,当我重新启动设备时,没有显示任何内容,似乎服务从未启动过。

以下是我的BroadcastReceiver子类的实现:

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.d("Test", "Bootstrap run!");

        int notificationId = 1;
        NotificationCompat.Builder startNotification = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("Glance")
            .setContentText("Starting the Glance service.")
        ;
        NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(notificationId, startNotification.build());

        //
        // Run the service.
        //
        Intent startServiceIntent = new Intent(context, Manager.class);
        context.startService(startServiceIntent);

    }

有关我可能在这里做错了什么或遗失的任何建议导致事情无效?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您在Android 3.1上进行测试,请在您的应用中添加一项活动,然后运行您的活动。从Android 3.1开始,清单注册的BroadcastReceivers将被阻止,直到手动运行您的某个组件,这通常意味着用户已启动您的某项活动。有关详细信息,请参阅this nearly-two-year-old blog post