我在使用RemoteView时遇到了一些问题。只想制作一个显示电池电量的小部件。我已经完成了所有其他的事情。
这是我的班级:
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。
答案 0 :(得分:2)
由于您的服务是内部类,我猜您还没有在Android Manifest中声明它,这是必需的。
并且您不应该使用onStart
,它已被弃用。使用onStartCommand
。而你忘记取消注册接收器...