2017-07-19 24 views
0

我有一个MediaPlayerService,当点击一个ListView项目上的播放/暂停按钮时,它现在开始启动。请参见下面的代码(CustomListAdapter):ANDROID - 在服务启动时使用媒体控件创建通知

Intent intent = new Intent(v.getContext(),MediaPlayerService.class); 
intent.putExtra("StreamLink",audio); 
activity.startService(intent); 

当该服务由代码开始上面我想创建一个播放一个通知/停止按钮。用户应该能够退出应用程序,能够停止媒体播放,例如player.stop()并启动player.start()。另外,当单击通知时,它应该将用户返回到MainActivity。

的代码为我MediaPlayerService.java:

public class MediaPlayerService extends Service implements MediaPlayer.OnPreparedListener { 

MediaPlayer mMediaPlayer = null; 
public String audioStreamLink; 

public int onStartCommand(Intent intent, int flags, int startId) { 

    // Get the Audio Streaming Link from the parsed JSON in the Main Activity 
    audioStreamLink = intent.getStringExtra("StreamLink"); 

    // Instantiate MediaPlayer, set the Audio Type and acquire a wakelock, set the Media Player Data Source and Prepare. 
    mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); 
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    try { 
     mMediaPlayer.setDataSource(audioStreamLink); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mMediaPlayer.setOnPreparedListener(this); 
    mMediaPlayer.prepareAsync(); 

    return START_STICKY; 

} 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

/** Called when MediaPlayer is ready */ 
@Override 
public void onPrepared(MediaPlayer player) { 
    player.start(); 
} 

@Override 
public void onDestroy() { 
    mMediaPlayer.stop(); 
    mMediaPlayer.reset(); 
    if (mMediaPlayer != null) mMediaPlayer.release(); 

} 
} 

回答

0

得到通知的过程中的文件被完全记录下来存在,例如,see this

为了帮助你经历这些巨大的文件,这些都是几点:

  • 你需要使用NotificationCompat.Builder
  • 一个典型的音乐播放服务将开始使用该通知以创建自定义通知startForeground()
  • 要在通知中添加可单击的按钮,请在构建通知时使用addAction()
  • 通知中的操作由PendingIntent定义,它是一种正常的Intent,当涉及到响应时。
  • 当单击通知上的按钮时,将按照您为该按钮指定的意图触发onStartCommand()(如果您正确配置该意图)。
  • 每个按钮的意图应该有不同的action,以便您可以识别接收时的意图。
  • onStartCommand()的内部,您可以播放/暂停并根据此意图的操作执行其他操作。

一些参考我建议你阅读:

如果你使用的是 MediaSession

事情就已经有点不同播放媒体。