android - 如何使用 MediaSessianCompat 进行媒体播放?

标签 android android-mediaplayer

我花了一整天的时间试图了解 MediaSessionCompat 的工作原理以及它到底做了什么?它与 MediaPlayer 或 AudioManager 类有何不同?但老实说,我没有找到任何好的解释。我得到的唯一信息是来自 android 文档和我在网上找到的一些代码,根据我的说法,在这种情况下是不够的。唯一有用的是this我在 Youtube 上找到的 Ian Lake 的视频。但我仍然无法理解我们如何在我们的应用程序中使用它。

这是我从 Ian Lake 那里找到的另一个代码,我花了很多时间研究它,但我仍然有很多疑问。

package com.example.remotecontrolclient;

import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.media.AudioManager;
import android.os.IBinder;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;

public class PlayerService extends Service {
    private MediaSessionCompat mediaSession;

    @Override
    public void onCreate() {
        super.onCreate();
        ComponentName receiver = new ComponentName(getPackageName(), RemoteReceiver.class.getName());
        mediaSession = new MediaSessionCompat(this, "PlayerService", receiver, null);
        mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
                MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
        mediaSession.setPlaybackState(new PlaybackStateCompat.Builder()
                .setState(PlaybackStateCompat.STATE_PAUSED, 0, 0)
                .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE)
                .build());
        mediaSession.setMetadata(new MediaMetadataCompat.Builder()
                .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, "Test Artist")
                .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, "Test Album")
                .putString(MediaMetadataCompat.METADATA_KEY_TITLE, "Test Track Name")
                .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 10000)
                .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART,
                    BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                .build());

        AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        audioManager.requestAudioFocus(new AudioManager.OnAudioFocusChangeListener() {
            @Override
            public void onAudioFocusChange(int focusChange) {
                // Ignore
            }
        }, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
        mediaSession.setActive(true);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (mediaSession.getController().getPlaybackState().getState() == PlaybackStateCompat.STATE_PLAYING) {
            mediaSession.setPlaybackState(new PlaybackStateCompat.Builder()
                    .setState(PlaybackStateCompat.STATE_PAUSED, 0, 0.0f)
                    .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE).build());
        } else {
            mediaSession.setPlaybackState(new PlaybackStateCompat.Builder()
                    .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f)
                    .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE).build());
        }
        return super.onStartCommand(intent, flags, startId);
    }

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

    @Override
    public void onDestroy() {
        super.onDestroy();
        mediaSession.release();
    }
}

有人可以提供一些教程或博客的链接,解释什么是 MediaSessionCompat 以及它如何用于媒体播放。如果没有,有人可以提供一个简单的示例来播放、暂停和停止任何媒体,比如来自使用 MediaSessionCompat 的 Activity 的 mp3 文件。任何帮助,将不胜感激。谢谢!!

最佳答案

关于android - 如何使用 MediaSessianCompat 进行媒体播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32855309/

相关文章:

android - 流式传输 Youtube 视频

java - PgaSocketWriteAllHdipc : hd_ipc_send() failed hd_ipc_send: not connected

java - 与android中的子字符串混淆

java - Android 应用程序中出现此错误的原因是什么 - channel 已不可恢复地损坏并将被处置

MediaPlayer.isplaying() 方法中的 java.lang.IllegalStateException

java - MediaPlayer.create() 总是返回 null

android - 当应用程序处于 LockTask(KIOSK 模式)时,媒体播放器不播放任何音频

android - 创建播客应用程序 android - 使用 MediaPlayer 类来播放播客?

java - 连接到 Java 服务器时 Android 客户端崩溃

android - 从后台服务中使用相机