如何保存和检索Android小部件ID

时间:2013-01-04 21:32:31

标签: android

我已经设置了这样的小部件

ToggleWidget.java

    public class ToggleWidget extends AppWidgetProvider {

    static RemoteViews remoteViews;
    boolean status = false;
    static int appWidgetId;

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        final int N = appWidgetIds.length;



        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            appWidgetId = appWidgetIds[i];

            remoteViews = new RemoteViews(context.getPackageName(), R.layout.toggle_widget);
            Intent intent = new Intent(context.getApplicationContext(), WakeService.class);
            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
            PendingIntent pendingIntent = PendingIntent.getService(
                    context.getApplicationContext(), 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
            remoteViews.setOnClickPendingIntent(R.id.bulb_widget, pendingIntent);




            if (WakeService.isAwake) {
                remoteViews.setImageViewResource(R.id.bulb_widget, R.drawable.bulb_on);

            }
            else {
                remoteViews.setImageViewResource(R.id.bulb_widget, R.drawable.bulb_off);

            }

         // Tell the AppWidgetManager to perform an update on the current app widget
            appWidgetManager.updateAppWidget(appWidgetId, remoteViews);


        }
    }

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        // TODO Auto-generated method stub
        super.onDeleted(context, appWidgetIds);

    }




}

如何保存我创建的每个小部件的ID,并删除那些我用sharedPreferences删除的小部件?

同样来自我希望像这样更新小部件的服务

private void updateWidget(){

    Intent intent = new Intent(this,ToggleWidget.class);
    intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
    int[] ids = {ToggleWidget.appWidgetId};
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
    sendBroadcast(intent);
}

如何从服务中检索已保存的ID以进行更新?

3 个答案:

答案 0 :(得分:0)

在您的Receiver中,必须覆盖 onCreate()方法并在该方法下

int[] ids = getIntent().getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

然后你会得到int数组,请检查它,它会工作...... :)

答案 1 :(得分:0)

看看android的Data Storage选项。以下是如何使用SharedPreferences ...

public class MyService extends Service{

            //Class used to store data
            private SharedPreferences preferences;
            private int[] ids;
            private int numIds;

            public void retreiveIds(){
                preferences = PreferenceManager.getDefaultSharedPreferences(this);
                numIds = preferences.getInt("num",0);
                ids = new int[numIds];
                for(int i=0;i<numIds;i++){
                    ids[i] = preferences.getInt("ID"+i,0);
                }
            }

            public void saveIds(){
                SharedPreferences.Editor ed = preferences.edit();
                numIds = ids.length;

                //iterate through array and save each id
                for(int i=0;i<numIds;i++){
                    ed.putInt("ID"+i,ids[i]);
                }

                ed.putInt("num",numIds);
                ed.commit();
            }
        }

答案 2 :(得分:0)

还有另一种方法。 Kotlin中的代码:

val thisWidget = ComponentName(context, this.javaClass)
val allWidgetIds: IntArray = appWidgetManager.getAppWidgetIds(thisWidget)

现在您可以使用这些allWidgetIds来更新小部件。