由于此网站的限制,我无法发布与我的问题相关的所有内容。 因此,您可以阅读以下所有内容: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" />
答案 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()中收听它。