0

In notification i try to update my battery status. I create notification with service. But i don't know how to update Notofication with battery status:

I also read this docs: http://developer.android.com/guide/topics/ui/notifiers/notifications.html

MainActivity

@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); } }; 

and i am using service which create Notification like

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); } 

error:

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 
2
  • 1
    I think you did not set your contentView in onCreate() method for your activity. Commented Dec 7, 2012 at 14:03
  • Previous commenter is correct; every notification needs a contentView. Use the Notification.Builder class (available in API 11, or in the support-v4 library for earlier platforms) to generate your notification object. Commented Dec 9, 2012 at 4:13

1 Answer 1

1

i think you need to use permission BATTERY_STATS. and if you want to update notification, you have to use PendingIntent.FLAG_UPDATE_CURRENT as flag in PendingActivity.getActivity

here's some code from my app :

final NotificationManager notificationMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification note = new Notification(R.drawable.icon, text, System.currentTimeMillis()); note.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE; note.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE; Intent intent = null; PendingIntent pendingIntent = null; intent = new Intent(context, MailActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(context.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); note.setLatestEventInfo(context, "nyxdroid", text, pendingIntent); notificationMgr.notify(1980 + type, note); 
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you. Can i instead of icon (R.drawable.icon) show text too? like 59% and battery icon?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.