0

だから、私は 5 つの主な機能を持つアプリを開発しています。これらの機能のウィジェットを作成したい - 各ウィジェットは 1 つの機能を提供します。5 つのレイアウト、5 つのプロバイダー プロパティ xml、および 5 つの AppWidgetProvider クラスを作成しました。以下のコードでわかるように、各プロバイダー クラスで onUpdate() メソッドを実装しました。そして、それらをマニフェストファイルに登録したことを確認してください。私の問題は、ウィジェットの 1 つをクリックすると、他のウィジェットの onUpdate メソッドも呼び出され、最後のウィジェットだけがサービスを開始することです。5つのウィジェットを独立させるにはどうすればよいですか?

プロバイダー クラスの 1 つ:

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