我的广播接收器不起作用,我在日志中没有收到消息,你能帮我吗? 这是我的广播接收者:
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手机。
答案 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)
我看不出任何直接错误。但有几件事要尝试:
答案 4 :(得分:0)
根据您的指示,更改android:exported
的值可以解决您的问题,我认为还有其他一些问题可以解决 - 从头开始重建您的代码。
在Eclipse中执行'Clean'(或开发环境中的等效命令)可以在将来为其他人解决此问题。