Widget OnClickPendingIntent服务未收到

时间:2012-11-08 22:11:45

标签: android service android-widget android-pendingintent

由于此网站的限制,我无法发布与我的问题相关的所有内容。 因此,您可以阅读以下所有内容: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);
}

这是我服务的Intent过滤器:

<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" />

2 个答案:

答案 0 :(得分:0)

不要忘记致电更新。这是我的一个应用程序的完整工作代码。改变它并按你认为合适的方式使用它。

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

答案 1 :(得分:0)

您使用getService()创建的PendingIntent不会触发onReceive()。您需要在onStartCommand()中收听它。