如何在不同组件之间传递媒体播放器对象



我有一个服务(不限制),该服务在特定时间投掷通知,并使用MediaPlayer对象开始播放音频。我在刷(或删除)的通知时设置了待处理意图开始广播接收器。现在,我希望接收器停止音频,但是由于无法使MediaPlayer对象实现可穿线路线,因此我很难传递对象。正如这个问题所建议的那样,我不想绑定服务。有没有一种通过对象的方法?

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");

这是广播接收器

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(){
    }
}

您可以在服务中的运行时注册广播接收器,并在服务停止时取消注册,因此您不必在组件之间传递MediaPlayer。

最新更新