启动服务启动完成后无效

时间:2013-12-12 18:53:40

标签: android service broadcastreceiver boot

我的广播接收器不起作用,我在日志中没有收到消息,你能帮我吗? 这是我的广播接收者:

public class BootReceiver extends BroadcastReceiver{
    public static SharedPreferences prefs;

    @Override
    public void onReceive(Context context, Intent intent) {
        prefs = PreferenceManager.getDefaultSharedPreferences(context);
        // TODO Auto-generated method stub
        Log.w("A intrat in BootReceiver"," ");
        if (!(prefs.getString(NotificareOptions.OptionsPos, "2")).equals("1"))
        context.startService(new Intent(context, ServiceNotif.class));

    }

}

我获得了许可,并且我在清单中声明了接收器。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

 <receiver android:name=".BootReceiver"  
            android:enabled="true"
            android:exported="true" >
            <intent-filter android:priority="500" >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

问题出在哪里?我还听说RECEIVE_BOOT_COMPLETED并不适用于所有Android手机。

5 个答案:

答案 0 :(得分:2)

您的代码看起来是正确的。这可能是模拟器的问题。我也在模拟器上使用BOOT_COMPLETE广播时出现问题。重新启动模拟器时并不总是触发。然而,以下ADB命令可以解决这个问题:

adb.exe -s emulator-5554 shell
# am broadcast -a android.intent.action.BOOT_COMPLETED

这将导致模拟器广播BOOT_COMPLETED消息,就像真实设备在启动时一样。这也具有比重新启动仿真器快得多的优点。

答案 1 :(得分:1)

在我的清单接收器中用android:exported="true"替换android:exported="false"后,它开始工作了。在许多教程中它没有说明,但也许这也可以帮助其他人。

答案 2 :(得分:0)

我注意到的一些事情。在BootReceiver中指定:

<receiver android:name=".BootReceiver"

这意味着接收器位于默认包中(例如,在清单中显示package的值)。如果不是这种情况,或者您不确定,可以像这样指定完整的包:

<receiver android:name="com.mycompany.boot.BootReceiver"

此外,您的日志消息可能正在运行,但您无法看到它。您记录为:

Log.w("A intrat in BootReceiver"," ");

因此标记为“BootReceiver中的一个intrat”,消息为空。尝试输入非空的消息值。

此外,如果您在设备重新启动时adb logcat正在运行,则可以看到是否触发了Intent。

答案 3 :(得分:0)

我看不出任何直接错误。但有几件事要尝试:

  1. 尝试使用完整的package.name.path.BootReceiver
  2. 命名接收器
  3. 从接收者声明中删除已启用,已导出和优先级

答案 4 :(得分:0)

根据您的指示,更改android:exported的值可以解决您的问题,我认为还有其他一些问题可以解决 - 从头开始​​重建您的代码。

在Eclipse中执行'Clean'(或开发环境中的等效命令)可以在将来为其他人解决此问题。