【问题标题】:ANDROID - Create Notification w/ Media Controls on Service StartANDROID - 在服务启动时创建带有媒体控制的通知
【发布时间】:2017-07-19 15:10:30
【问题描述】:

我有一个 MediaPlayerService,当前在单击 ListView 项目上的播放/暂停按钮时启动。请参阅下面的代码(CustomListAdapter):

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

}
}

【问题讨论】:

    标签: android service notifications onclick android-mediaplayer


    【解决方案1】:

    获取通知的过程完全记录在文档中,例如see this

    为了帮助您浏览所有这些庞大的文档,以下几点是:

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

    我建议您阅读一些参考资料:

    如果您使用MediaSession 播放媒体,情况会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多