我的服务有问题。我正在尝试做一个简单的电池级小部件,但问题是我不知道如何从主屏幕移除小部件时停止服务。
这是我的服务类
public class batteryService扩展服务{
AppWidgetManager widgetManager;
private RemoteViews remoteViews;
private ComponentName thisWidget;
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
widgetManager = AppWidgetManager.getInstance(context);
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
thisWidget = new ComponentName(context, Widget.class);
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)*100;
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float value = (float)level/scale;
remoteViews.setTextViewText(R.id.widget_textview, String.valueOf(value));
widgetManager.updateAppWidget(thisWidget, remoteViews);
}
};
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
this.registerReceiver(mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
super.onCreate();
}
@Override
public void onDestroy() {
this.unregisterReceiver(mBatInfoReceiver);
super.onDestroy();
}
}
和这里的widget类
public class Widget extends AppWidgetProvider{
private AppWidgetManager widget_manager;
private RemoteViews remoteViews;
private ComponentName thisWidget;
private Intent intent;
@Override
public void onEnabled(Context context) {
if(intent == null)
{
intent = new Intent(context, batteryService.class);
context.startService(intent);
}
super.onEnabled(context);
}
@Override
public void onDisabled(Context context) {
if(intent != null)
{
context.stopService(intent);
intent = null;
}
super.onDisabled(context);
}
}
当我从屏幕上删除小部件时,该服务仍然是实时的。我试图将onDisable改为onDeleted方法,但它没有改变任何东西。
对我有任何提示吗?
答案 0 :(得分:0)
确保您在清单中为已禁用的事件采取了相应的操作:
<action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
对于APPWIDGET_ENABLED
的{{1}}元素,这将与您现有的APPWIDGET_UPDATE
以及经典<receiver>
操作一起使用。
此外,请考虑不要经常运行您的服务,而是使用AppWidgetProvider
每隔几分钟更新一次电池信息。电池电量根本不会改变,因此必须始终尝试将服务保留在内存中。
答案 1 :(得分:0)
尝试使用onDeleted(Context, int[])