Android: виджет BatteryLevel не обновляется - PullRequest
6 голосов
/ 07 ноября 2011

У меня проблемы с использованием RemoteViews. Просто хочу сделать виджет, который показывает уровень заряда батареи. Я уже сделал все остальное.

Вот мой класс:

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

Когда я запускаю приложение без ошибок и, между прочим, без обновления на R.id.level.

Что не так?

Примечание: API-версия 7.

1 Ответ

2 голосов
/ 07 ноября 2011

Поскольку ваш сервис является внутренним классом, я думаю, вы не объявили его в своем манифесте Android, который необходим. И вы не должны использовать onStart, это устарело. Используйте onStartCommand. И вы забыли отменить регистрацию вашего приемника ...

...