2016-06-23 8 views
1

Ich habe einen Dienst (nicht gebunden), der eine Benachrichtigung zu einem bestimmten Zeitpunkt auslöst und Audio mit MediaPlayer Objekt spielt.Ich setze eine ausstehende Absicht, wenn die Benachrichtigung übersprungen (oder gelöscht) wird startete einen Rundfunkempfänger. Jetzt möchte ich, dass der Receiver den Ton stoppt, aber ich habe Schwierigkeiten, das Objekt zu übergeben, da ich das MediaPlayer-Objekt nicht parzellierbar machen kann. Ich möchte den Dienst nicht binden, wie in this Frage vorgeschlagen. Gibt es eine Möglichkeit, das Objekt zu passieren?Wie MediaPlayer-Objekt zwischen verschiedenen Komponenten übergeben werden

Calendar current = Calendar.getInstance(); 
while (!(Integer.parseInt(parts[0]) == current.get(Calendar.HOUR_OF_DAY) && 
Integer.parseInt(parts[1]) == current.get(Calendar.MINUTE) && 

Integer.parseInt(parts[2]) == current.get(Calendar.SECOND))) 
{ 
current = Calendar.getInstance(); 
} 
mediaPlayer = MediaPlayer.create(AlarmService.this, R.raw.angersextended); 

mediaPlayer.start(); 

Intent intent = new Intent(AlarmService.this, NotifSwipeReceiver.class); 

Bundle bundle=new Bundle(); 
Log.i("abc1", "beforeparcelable"); 
bundle.putParcelable("mp", (Parcelable) mediaPlayer); 
//bundle.putSerializable("mp", (Serializable) mediaPlayer); 

Log.i("abc1","afterparcelable"); 
intent.putExtras(bundle); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(AlarmService.this, 0, intent, 0); 
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(AlarmService.this); 
mBuilder.setDeleteIntent(pendingIntent); 
mBuilder.setContentTitle(time); 
mBuilder.setContentText("Alarm" + String.valueOf(j)); 
mBuilder.setSmallIcon(R.mipmap.ic_launcher); 

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
mNotificationManager.notify(0, mBuilder.build()); 
Log.i("abc", String.valueOf(j)+"notif"); 

und hier ist der Empfänger Sendung

public static class NotifSwipeReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     MediaPlayer mp= (MediaPlayer) intent.getExtras().getParcelable("mp"); 
     mp.stop(); 
     //MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.angersextended); 
     //if(mediaPlayer.isPlaying())mediaPlayer.stop(); 
    } 
    public NotifSwipeReceiver(){ 
    } 

} 

Antwort

0

Sie können es Rundfunkempfänger zur Laufzeit in Ihrem Dienst registrieren und deregistrieren, wenn Dienst beendet, so dass Sie nicht zwischen den Komponenten Mediaplayer übergeben.

+0

Haben Sie nicht bekommen. Wie ermöglicht die dynamische Registrierung, dass das Objekt vom Broadcast-Empfänger verwendet wird? – Jacksparrow

Verwandte Themen