0

所以,我正在开发一个应用程序,它有 5 个主要功能。我想为这些功能制作小部件 - 每个小部件都提供一个功能。我制作了 5 个布局、5 个提供程序属性 xml 和 5 个 AppWidgetProvider 类。在每个提供程序类中,我都实现了 onUpdate() 方法,您可以在下面的代码中看到。并且确定我已经在清单文件中注册了它们。我的问题是,当我单击其中一个小部件时,它也会调用其他小部件 onUpdate 方法,并且只有最后一个小部件启动服务。如何使 5 小部件独立?

提供者类之一:

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

        final int N = appWidgetIds.length;

        for (int i = 0; i < N; i++) {
            int appWidgetId = appWidgetIds[i];

            String label = appWidgetManager.getAppWidgetInfo(appWidgetId).label;

            Intent intent = new Intent(context, WidgetService.class);
            intent.putExtra(Constants.FUNCTION, Constants.F1);
            PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

            RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_f1);
            remoteViews.setOnClickPendingIntent(R.id.widgetF1Button, pendingIntent);

            appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
        }
    }

}

小部件服务:

    public class WidgetService extends Service {

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

            Bundle bundle = intent.getExtras();
            int function = bundle.getInt(Constants.FUNCTION);

            switch (function) {
                case Constants.F1
                      //function1

                case Constants.F2:
                      //funcion2

                case Constants.F3: {
                      //function3

                case Constants.F4: {
                      //function4

                case Constants.F5: {
                      //function5public class WidgetService extends Service {

         }

        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
4

1 回答 1

0

尝试对每个 pendingIntent 使用不同的 requestCode:

 PendingIntent pendingIntent = PendingIntent.getService(context, uniqueRequestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);

它应该使 android 能够区分您的待处理意图,因此所有按钮都将启动服务,而不仅仅是最后一个。这应该起作用的原因很久以前就在这里讨论过 - 如果您有兴趣,我可以尝试查找它。

于 2013-06-17T20:12:21.393 回答