2014-06-10 2 views
-4

나는 음악을 재생하는 앱이 Service입니다. 음악 플레이어를 제어하는 ​​위젯도 있습니다. 모든 것이 잘 작동합니다.앱이 충돌하거나 사용자가 앱을 죽인 후에 위젯이 데이터 수신을 중지합니까?

사용자가 앱을 닫거나 충돌이 발생하거나 System.exit(); 또는 getActivity().finish();을 사용하여 앱을 닫으면 몇 가지 문제가 발생합니다. 모든 것이 잘 작동하는 것처럼 보이지만, 비록 다른 Activity이 여전히 그것들을 수신하더라도 위젯은 더 이상 방송을 수신하지 않습니다.

위젯은 여전히 ​​브로드 캐스트를 보낼 수 있지만 수신 할 수는 없습니다.

누군가 나를 도와주세요. 내 위젯에서

코드 :

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

    ma = (GlobalSongList)context.getApplicationContext(); 

    context.getApplicationContext().registerReceiver(broadcastCoverReceiver, new IntentFilter(Music_service.BROADCAST_COVER)); 

    context.getApplicationContext().registerReceiver(broadcastPlayPause, new IntentFilter(BROADCAST_PLAYPAUSE)); 
    context.getApplicationContext().registerReceiver(checkagain, new IntentFilter("xyz")); 
    context.getApplicationContext().registerReceiver(intentshuttingdown, new IntentFilter("shutdown")); 

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

    Intent playIntent = new Intent(BROADCAST_PLAYPAUSE); 
    PendingIntent playPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, playIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    controlButtons.setOnClickPendingIntent(R.id.bPlay, playPendingIntent); 


    Intent previousIntent = new Intent(why); 
    PendingIntent previousPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, previousIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    controlButtons.setOnClickPendingIntent(R.id.bprev, previousPendingIntent); 

    if(ma.NP_List.size()>0) { 
     controlButtons.setTextViewText(R.id.song, ma.NP_List.get(ma.position).song); 
     controlButtons.setTextViewText(R.id.artist, ma.NP_List.get(ma.position).getArtist()); 

     Intent open_activityIntent = new Intent(BROADCAST_open_activity); 
     PendingIntent openactivityPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, open_activityIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     controlButtons.setOnClickPendingIntent(R.id.parent, openactivityPendingIntent); 

     if(ma.boolMusicPlaying1 == true) { 
      controlButtons.setImageViewResource(R.id.bPlay, R.drawable.pause2); 
     } else { 
      controlButtons.setImageViewResource(R.id.bPlay, R.drawable.play); 
     } 
    } else if(ma.NP_List.size() == 0) { 
     controlButtons.setTextViewText(R.id.song, ""); 
     controlButtons.setTextViewText(R.id.artist, ""); 
    } 

    Intent nextIntent  = new Intent(BROADCAST_SWAP); 
    nextIntent.putExtra("nextprev", 1); 

    PendingIntent nextPendingIntent = PendingIntent.getBroadcast(context, 0, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    controlButtons.setOnClickPendingIntent(R.id.bNext, nextPendingIntent); 

    appWidgetManager.updateAppWidget(appWidgetIds, controlButtons); 
} 

public BroadcastReceiver broadcastCoverReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent serviceIntent) { 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext()); 
     ComponentName thisWidget = new ComponentName(context.getApplicationContext(), MyWidget.class); 
     int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
     if (appWidgetIds != null && appWidgetIds.length > 0) { 
      onUpdate(context, appWidgetManager, appWidgetIds); 
     } 
    } 
}; 
+1

글쎄요 관련 코드를 게시하십시오. 아무도 그 설명에서 당신을 도울 수있을 것입니다, 우리는 당신이 한 일을 볼 필요가 있습니다. 그러나'System.exit()'가 이미 문제 일 수 있습니다. ** 절대 System.exit()를 사용하지 마십시오. OS가 제어되면 앱이 종료되면서 문제를 일으킬 수 있습니다. –

+0

글쎄, 나는 "또는"유일한 시나리오가 아니기 때문에 ...... –

+0

내가 게시해야 할 코드를 알려주시겠습니까? –

답변

0

당신이해야 bindonResumeunbind 백그라운드 서비스 및 활동에 각각 onPause.

방문 Android Activity and Service relationship - after Pause, after Stop 당신은 안드로이드 응용 프로그램 위젯을 사용하고 또한 문서에서 언급 한 그 일의 가장 일반적인 방법은 .... 때문에 브로드 캐스트를 사용하지 않아야

1

서비스 및 활동 사이의 관계를 알 수있는

관련 문제