我做了一个简单的应用程序,监视设备的电池电量。 我用这个代码:intent.action.BATTERY_CHANGED期间发生致命异常
private void setProperImageByBatteryLevel() {
BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
context.unregisterReceiver(this);
int rawlevel = intent.getIntExtra("level", -1);
int scale = intent.getIntExtra("scale", -1);
int level = -1;
if (rawlevel >= 0 && scale > 0) {
level = (rawlevel * 100)/scale;
}
if (DEBUG) {
Log.i(TAG, "Charge: " + Integer.toString(level) + "%");
}
if (level > 80) {
batteryImg.setImageResource(R.drawable.bat100);
} else if (level > 60) {
batteryImg.setImageResource(R.drawable.bat80);
} else if (level > 40) {
batteryImg.setImageResource(R.drawable.bat60);
} else if (level > 20) {
batteryImg.setImageResource(R.drawable.bat40);
} else if (level > 0) {
batteryImg.setImageResource(R.drawable.bat20);
}
}
};
IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
activity.registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}
它可以正常工作,但有时我得到以下异常:(约10/1倍)
01-21 13:16:56.617: E/AndroidRuntime(7810): FATAL EXCEPTION: main
01-21 13:16:56.617: E/AndroidRuntime(7810): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.BATTERY_CHANGED flg=0x60000000 (has extras) } in [email protected]
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722)
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.os.Handler.handleCallback(Handler.java:587)
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.os.Handler.dispatchMessage(Handler.java:92)
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.os.Looper.loop(Looper.java:123)
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.app.ActivityThread.main(ActivityThread.java:3687)
01-21 13:16:56.617: E/AndroidRuntime(7810): at java.lang.reflect.Method.invokeNative(Native Method)
01-21 13:16:56.617: E/AndroidRuntime(7810): at java.lang.reflect.Method.invoke(Method.java:507)
01-21 13:16:56.617: E/AndroidRuntime(7810): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
01-21 13:16:56.617: E/AndroidRuntime(7810): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-21 13:16:56.617: E/AndroidRuntime(7810): at dalvik.system.NativeStart.main(Native Method)
01-21 13:16:56.617: E/AndroidRuntime(7810): Caused by: java.lang.IllegalArgumentException: Receiver not registered: [email protected]
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:610)
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:919)
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:331)
01-21 13:16:56.617: E/AndroidRuntime(7810): at hu.trendency.activitimap.widgets.Battery$2.onReceive(Battery.java:92)
01-21 13:16:56.617: E/AndroidRuntime(7810): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709)
01-21 13:16:56.617: E/AndroidRuntime(7810): ... 9 more
任何人看到这个问题?
编辑:
我改变了你告诉我,现在我得到这样的方式:
01-23 14:43:40.205: E/AndroidRuntime(27064): FATAL EXCEPTION: main
01-23 14:43:40.205: E/AndroidRuntime(27064): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.BATTERY_CHANGED flg=0x60000000 (has extras) } in [email protected]
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722)
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.os.Handler.handleCallback(Handler.java:587)
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.os.Handler.dispatchMessage(Handler.java:92)
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.os.Looper.loop(Looper.java:123)
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.app.ActivityThread.main(ActivityThread.java:3687)
01-23 14:43:40.205: E/AndroidRuntime(27064): at java.lang.reflect.Method.invokeNative(Native Method)
01-23 14:43:40.205: E/AndroidRuntime(27064): at java.lang.reflect.Method.invoke(Method.java:507)
01-23 14:43:40.205: E/AndroidRuntime(27064): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
01-23 14:43:40.205: E/AndroidRuntime(27064): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-23 14:43:40.205: E/AndroidRuntime(27064): at dalvik.system.NativeStart.main(Native Method)
01-23 14:43:40.205: E/AndroidRuntime(27064): Caused by: java.lang.IllegalArgumentException: Receiver not registered: [email protected]
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:610)
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:919)
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:331)
01-23 14:43:40.205: E/AndroidRuntime(27064): at hu.trendency.activitimap.widgets.Battery$2.onReceive(Battery.java:93)
01-23 14:43:40.205: E/AndroidRuntime(27064): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709)
不要在其内部注册广播寄存器。要么把它在清单或活动你的问题是java.lang.IllegalArgumentException:收件人未注册:[email protected] – 2013-01-21 12:25:45
可以参考http://stackoverflow.com/questions/6165070/receiver-没有注册异常错误.. – user1969053