【问题标题】:How to stop service when removing widget from homescreen从主屏幕删除小部件时如何停止服务
【发布时间】:2012-01-10 23:29:05
【问题描述】:

我的服务有问题。我正在尝试做一个简单的电池电量小部件,但问题是当小部件从主屏幕删除时我不知道如何停止服务。

这是我的服务类

公共类电池服务扩展服务{

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

}

这里是小部件类

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 方法,但它没有改变任何东西。

你有什么建议吗?

【问题讨论】:

    标签: android service widget


    【解决方案1】:

    确保您的清单中有针对禁用事件的适当操作:

    <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
    

    这将与您现有的 APPWIDGET_ENABLED 以及经典的 APPWIDGET_UPDATE 操作一起用于您的 AppWidgetProvider&lt;receiver&gt; 元素。

    另外,请考虑不要让您的服务持续运行,而是每隔几分钟使用AlarmManager 更新一次电池信息。电池电量不会经常变化,因此有必要始终尝试将服务保存在内存中。

    【讨论】:

    • 我的清单中有这个声明,但它仍然不起作用。我想我的代码有问题我需要阅读更多关于使用小部件的服务。
    【解决方案2】:

    尝试使用onDeleted(Context, int[])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多