gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:07:25 31 4
gpt4 key购买 nike

我花了一整天的时间试图了解 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com