0

このサイトの制限により、私の問題に関連するすべてを投稿することはできません。したがって、すべてを読むことができます:http://www.dreamincode.net/forums/topic/299148-widget-onclickpendingintent-not-received-by-service/

基本的に、現在再生中の曲を表示し、ユーザーが再生を切り替えたりトラックを変更したりできるようにするウィジェットを音楽アプリに用意しました。ウィジェットはうまく更新されますが、サービスはサービスによって受信されません。

これは、OnClickPendingIntent を設定する方法です。

  RemoteViews updateViews = null;
  ComponentName thisWidget = new ComponentName(this, GMWidget.class);
  updateViews = new RemoteViews(this.getPackageName(), R.layout.widget);
  Intent WIDGET_PAUSE_PLAY_intent = new Intent(this, GMService.class);
  WIDGET_PAUSE_PLAY_intent.setAction(WIDGET_PAUSE_PLAY);
  PendingIntent WidgetPausePlay = PendingIntent.getService(this, 0, new Intent(WIDGET_PAUSE_PLAY).setComponent(thisWidget), 0);
  updateViews.setonclickPendingIntent(R.id.pbWidMediaPlay, WidgetPausePlay);

これは私のOnReceiveです:

public void onReceive(Context context, Intent intent) {
  //  super.onReceive(context, intent);
    String action = intent.getAction();
    Log.d(TAG,"CLICKK: " + action);
}

これは私のサービスのインテントフィルターです:

<action android:name="android.media.AUDIO_BECOMING_NOISY" /> />
<action android:name="com.my.player.WIDGET_NEXT" />
<action android:name="com.my.player.WIDGET_PREV" />
<action android:name="com.my.player.WIDGET_PAUSE_PLAY" />
<action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
4

2 に答える 2

0

updateを呼び出すことを忘れないでください。これが私のアプリの1つからの完全に機能するコードです。変更して、必要に応じて使用してください。

public class Widget extends AppWidgetProvider 
{

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

        Log.i("Widget", "onUpdate");

        final int N = appWidgetIds.length;

        for (int i=0; i<N; i++) 
        {

            int appWidgetId = appWidgetIds[i];

            Log.i("Widget", "onUpdateLoop");

            Intent intent = new Intent(context.getApplicationContext(), MyService.class);
            intent.setAction(Long.toString(System.currentTimeMillis()));

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

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);

            views.setOnClickPendingIntent(R.id.widgetButton, pendingIntent);

            appWidgetManager.updateAppWidget(appWidgetId, views);

    }

  }

}

編集:また、アプリの他の場所からウィジェットを更新する場合は、更新のコンポーネントを見逃さないようにしてください。updateAppWidgetを呼び出すたびに、すべて同じコンポーネント、特にonPendingIntentClickが含まれている必要があります。

于 2012-11-08T22:32:15.643 に答える
0

getService() で作成した PendingIntent は onReceive() をトリガーしません。onStartCommand() でリッスンする必要があります。

于 2012-11-08T22:33:13.693 に答える