2012-11-08 5 views
0

이 사이트의 제한 때문에 내 문제와 관련된 모든 것을 게시 할 수 없습니다. 모든 것을 읽을 수 있습니다. http://www.dreamincode.net/forums/topic/299148-widget-onclickpendingintent-not-received-by-service/위젯 OnClickPendingIntent가 서비스별로 수신되지 않음

기본적으로 현재 재생중인 노래를 표시하고 사용자가 재생 또는 트랙을 전환 할 수있게 해주는 위젯이 내 음악 앱에 있습니다. 위젯은 멋지게 업데이트되지만 서비스는 서비스에 의해 수신되지 않습니다. 내가 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" /> 

답변

0

getService()로 만든 PendingIntent는 onReceive()를 트리거하지 않습니다. onStartCommand()에서이 파일을 청취해야합니다.

+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

관련 문제