Android: BatteryLevel widget not updating

I'm having problems using RemoteView. Just want to create a widget that shows the battery level. I have already done the rest.

Here is my class:

  public class BatteryLevel extends AppWidgetProvider {

     public void onUpdate (Context context, AppWidgetManager appWidgetManager, int [] appWidgetIds) {
         context.startService (new Intent (context, BatteryMonitorReceiver.class));
     }

     public static class BatteryMonitorReceiver extends Service {
         private int currentBatteryLevel = 0;

         private BroadcastReceiver batteryReceiver = new BroadcastReceiver () {
             @Override
             public void onReceive (Context context, Intent intent) {
                 currentBatteryLevel = intent.getIntExtra ("level", 0);
             }
         };

         @Override
         public void onStart (Intent intent, int startId) {          
             registerReceiver (this.batteryReceiver, new IntentFilter (Intent.ACTION_BATTERY_CHANGED));
             RemoteViews updateViews = new RemoteViews (getPackageName (), R.layout.main);
             updateViews.setTextViewText (R.id.level, String.valueOf (currentBatteryLevel));

             ComponentName thisWidget = new ComponentName (this, BatteryLevel.class);
             AppWidgetManager manager = AppWidgetManager.getInstance (this);
             manager.updateAppWidget (thisWidget, updateViews);
         }

         @Override
         public IBinder onBind (Intent intent) {
             return null;
         }
     }
 } 

When I run the application without errors and there is no btw without updating at the level of R.id.level.

What's wrong?

Note: api version 7.

+4
source share
1 answer

Since your service is an inner class, I think you did not declare it in your Android manifest, which is needed. And you should not use onStart , it is deprecated. Use onStartCommand . And you forgot to unregister your receiver ...

+2
source

Source: https://habr.com/ru/post/1380007/


All Articles