通知で、バッテリーの状態を更新しようとします。サービスで通知を作成します。しかし、バッテリーの状態でNotoficationを更新する方法がわかりません:
このドキュメントも読みました: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
主な活動
@Override
public void onCreate(Bundle savedInstanceState) {
registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
..
}
private BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
private int scale = -1;
private int level = -1;
private int voltage = -1;
private int temp = -1;
@Override
public void onReceive(Context context, Intent intent) {
level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager)context.getSystemService(ns);
long when = System.currentTimeMillis();
String percent = ((level * 100) / scale) + "%";
Notification notification = new Notification(R.drawable.call, percent, when);
/* <set your intents here> */
mNotificationManager.notify(7331, notification);
Log.d(TAG, "Battery level is " + level + "/" + scale + ", temp is " + temp + ", voltage is " + voltage);
}
};
私は通知を作成するサービスを使用しています
private void showNotification() {
Notification notification = new Notification(R.drawable.call, getString(R.string.notification_text), System.currentTimeMillis());
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
notification.setLatestEventInfo(this, getString(R.string.notification_label), getString(R.string.notification_text_short), pi);
notification.flags |= Notification.FLAG_NO_CLEAR;
startForeground(7331, notification);
}
エラー:
12-07 14:46:29.425: E/AndroidRuntime(25758): FATAL EXCEPTION: main
12-07 14:46:29.425: E/AndroidRuntime(25758): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.BATTERY_CHANGED flg=0x60000010 (has extras) } in com.xxx.xxx.MainActivity$1@41558b80
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:737)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.os.Handler.handleCallback(Handler.java:605)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.os.Handler.dispatchMessage(Handler.java:92)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.os.Looper.loop(Looper.java:137)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.app.ActivityThread.main(ActivityThread.java:4511)
12-07 14:46:29.425: E/AndroidRuntime(25758): at java.lang.reflect.Method.invokeNative(Native Method)
12-07 14:46:29.425: E/AndroidRuntime(25758): at java.lang.reflect.Method.invoke(Method.java:511)
12-07 14:46:29.425: E/AndroidRuntime(25758): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
12-07 14:46:29.425: E/AndroidRuntime(25758): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
12-07 14:46:29.425: E/AndroidRuntime(25758): at dalvik.system.NativeStart.main(Native Method)
12-07 14:46:29.425: E/AndroidRuntime(25758): Caused by: java.lang.IllegalArgumentException: contentView required: pkg=com.xxx.xxx id=7331 notification=Notification(contentView=null vibrate=null,sound=null,defaults=0x0,flags=0x0)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.os.Parcel.readException(Parcel.java:1331)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.os.Parcel.readException(Parcel.java:1281)
12-07 14:46:29.425: E/AndroidRuntime(25758): at
android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:317)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.app.NotificationManager.notify(NotificationManager.java:127)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.app.NotificationManager.notify(NotificationManager.java:106)
12-07 14:46:29.425: E/AndroidRuntime(25758): at com.xxx.xxx.MainActivity$1.onReceive(MainActivity.java:72)
12-07 14:46:29.425: E/AndroidRuntime(25758): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
12-07 14:46:29.425: E/AndroidRuntime(25758): ... 9 more