だから、私は 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;
}
}