2012-01-10 45 views
0

我遇到服務問題。我試圖做一個簡單的電池級別的小部件,但問題是,我不知道如何停止服務時,部件從主屏幕中刪除。如何在從主屏幕移除小工具時停止服務

這裏是我的服務類

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

}

這裏部件類

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

確保你有你的清單殘疾人事件相應的操作:

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

這將是在保留現有APPWIDGET_ENABLED也許是經典APPWIDGET_UPDATE行動,爲<receiver>元素爲您AppWidgetProvider

此外,請考慮不要讓您的服務持續運行,而應使用AlarmManager每隔幾分鐘更新一次電池信息。電池電量不會經常發生變化,因此有必要嘗試將內存保存在任何時間。

+0

我在我的清單中有這個聲明,它仍然不起作用。我想我的代碼有問題,我需要閱讀更多關於使用小部件的服務的小問題。 – Greg 2012-01-11 19:16:55

0

嘗試使用onDeleted(Context, int[])