2014-06-10 21 views
-4

我有一個在Service播放音樂的應用程序。還有一個小工具來控制音樂播放器。一切正常。應用程序崩潰或用戶殺死應用程序後,Widget停止接收數據?

現在用戶關閉應用程序後,或者如果它崩潰,或者如果我使用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()'。操作系統控制應用程序何時死亡,試圖干擾只會導致問題。 –

+0

以及我寫的「或」它不是唯一的場景...... –

+0

請告訴我我應該發佈什麼代碼? –

回答

1

您應該使用Android應用插件並且由於它是這樣做的最常規的方式....這也是在該文檔中提到不使用廣播

相關問題