미디어 브라우저 서비스 정보(MediaBrowserService)
12884 단어 Android
위의 몇 가지 점에 대해 사실
Android
은 우리에게 완전한 해결 방안을 제공했다. 이것은 이러한 조작을 잘 봉인했다. 우리는 데이터의 획득과 노래의 재생에 주목하면 된다.Android
에서 사용할 수 있는 API는 support-v4
에서 호환 가능한 버전이므로 이 버전을 사용하는 것이 저버전 시스템과 호환됩니다.관건류는 주로 다음과 같은 몇 가지가 있다.
MediaBrowserServiceCompat
미디어 브라우저 서비스 2.MediaBrowserCompat
미디어 브라우저 2.MediaControllerCompat
미디어 컨트롤러 3.MediaSessionCompat
미디어 회화는 우리 하나씩 하자.MediaBrowserServiceCompat
이 종류는 두 가지 작용이 있다.음악 재생 백그라운드 서비스 2.클라이언트에서 음악 데이터를 얻는 서비스, 모든 음악 데이터는 이 서비스를 통해 서버와 상호작용을 한다(또는 핸드폰의 로컬 음악 데이터를 직접 얻는다)
이 클래스가
Service
의 하위 클래스인 것을 알았기 때문에 음악 재생의 백엔드 서비스라는 것도 이해할 수 있지만 이 클래스는 백엔드 재생 서비스로서 그 자체를 통해 직접적으로 이루어진 것이 아니라 MediaSessionCompat
미디어 회화라는 클래스를 통해 이루어진 것이다.사용 과정에서 미디어 세션은 이 서비스와 연결되고 모든 재생 작업은 MediaSessionCompat
에 의해 이루어진다.데이터를 가져오는 방법은
MediaBrowserServiceCompat
의 다음과 같은 두 가지 방법으로 제어할 수 있습니다.@Override
public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid,
Bundle rootHints) {
/**
* , ,
* */
if(!PackageUtil.isCallerAllowed(this, clientPackageName, clientUid)) {
return new BrowserRoot(null, null);
}
//
// rootId BrowserRoot ,
// null
return new BrowserRoot(BrowserRootId.MEDIA_ID_ROOT, null);
}
@Override
public void onLoadChildren(@NonNull String parentId, @NonNull Result> result) {
/***
* parentId onGetRoot RootId
* , MediaBrowserCompat.subscribe() 。
* subscribe() onLoadChildren() service , MediaBrowser.MediaItem( )
*
* MediaItem ID , token。
* item , ID 。
*/
if(BrowserRootId.MEDIA_ID_MUSIC_LIST_REFRESH.equals(parentId)) {
// result.detach(),
result.detach();
MusicProvider.getInstance().requestMusic(result);
// http , result.detach(); , 。http result.sendResult(mMetadataCompatList); , MediaBrowserCompat.SubscriptionCallback
// MediaBrowser.MediaItem
} else {
result.detach();
}
}
MediaBrowserCompat
앞에서 말했듯이
MediaBrowserServiceCompat
(매체 조회 서비스)는 데이터 요청 서비스로서 데이터를 얻는 것이기 때문에 해당하는 미디어 조회 클라이언트가 미디어 데이터의 취득 요청을 하는데 이 유형이 바로 이 클라이언트이다.앞에서 설명한 바와 같이 호출MediaBrowserCompat.subscribe()
방법을 통해 데이터 요청을 할 수 있습니다. 이 방법을 호출하기 전에 MediaBrowserCompat
미디어 조회 서비스에 연결해야 합니다. 연결 방식은 다음과 같습니다.// MediaBrowserServiceCompat, token
// token MediaControllerCompat
// MediaControllerCompat MediaSessionCompat
MediaBrowserCompat mediaBrowser = new MediaBrowserCompat(this,
new ComponentName(this, MusicService.class), mConnectionCallback, null);
//
final MediaBrowserCompat.ConnectionCallback mConnectionCallback =
new MediaBrowserCompat.ConnectionCallback() {
@Override
public void onConnected() {
try {
// MediaBrowserServiceCompat token
MediaSessionCompat.Token token = mMediaBrowser.getSessionToken();
// token
//
MediaControllerCompat mediaController = new MediaControllerCompat(this, token);
// Context
// , UI Context MediaControllerCompat
//MediaControllerCompat controller = MediaControllerCompat.getMediaController((Activity) context);
MediaControllerCompat.setMediaController(this, mediaController);
// mediaController.registerCallback(mMediaControllerCallback);
} catch (RemoteException e) {
onMediaControllerConnectedFailed();
}
}
};
//
final MediaControllerCompat.Callback mMediaControllerCallback =
new MediaControllerCompat.Callback() {
@Override
public void onPlaybackStateChanged(@NonNull PlaybackStateCompat state) {
//
onMediaPlayStateChanged(state);
}
@Override
public void onMetadataChanged(MediaMetadataCompat metadata) {
if(metadata == null) {
return;
}
//
onPlayMetadataChanged(metadata);
}
};
//
//
mediaBrowser.unsubscribe(BrowserRootId.MEDIA_ID_MUSIC_LIST_REFRESH);
// BrowserRootId
// , MusicService onGetRoot onLoadChildren
//onGetRoot ( )
// , onLoadChildren
//
mediaBrowser.subscribe(BrowserRootId.MEDIA_ID_MUSIC_LIST_REFRESH, mSubscriptionCallback);
//
final MediaBrowserCompat.SubscriptionCallback mSubscriptionCallback =
new MediaBrowserCompat.SubscriptionCallback() {
@Override
public void onChildrenLoaded(@NonNull String parentId,
@NonNull List children) {
//
}
@Override
public void onError(@NonNull String id) {
//
}
};
MediaSessionCompat
앞에서 말했듯이
MediaBrowserServiceCompat
의 미디어 재생은 사실 관련MediaSessionCompat
을 통해 이루어진 것이고 그 관련 방식도 간단하다.MediaSessionCompat mSession = new MediaSessionCompat(this, "MusicService");
setSessionToken(mSession.getSessionToken());
mSession.setCallback(new MediaSessionCompat.Callback());
mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
//MediaSessionCompat MediaSessionCompat.Callback
@Override
public void onPlay() {
//
// MediaControllerCompat .getTransportControls().play();
}
@Override
public void onSkipToQueueItem(long queueId) {
//
// MediaControllerCompat .getTransportControls().onSkipToQueueItem(queueId);
}
@Override
public void onSeekTo(long position) {
//
//MediaControllerCompat.getTransportControls().seekTo(position);
}
@Override
public void onPlayFromMediaId(String mediaId, Bundle extras) {
//
//MediaControllerCompat.getTransportControls().playFromMediaId(mediaItem.getMediaId(), null);
}
@Override
public void onPause() {
//
//MediaControllerCompat.getTransportControls().pause();
}
@Override
public void onStop() {
//
//MediaControllerCompat.getTransportControls().stop();
}
@Override
public void onSkipToNext() {
//
//MediaControllerCompat.getTransportControls().skipToNext();
}
@Override
public void onSkipToPrevious() {
//
//MediaControllerCompat.getTransportControls().skipToPrevious();
}
// ,
}
MediaControllerCompat
미디어 컨트롤러는 위에서 그 창설과 관련 방식을 소개했고 플레이어의 상태를 제어하는 방식은 위의 코드 주석에서 설명했고 기본적으로
MediaControllerCompat.getTransportControls()
를 통해 제어했다.여기에서 미디어 서비스의 사용과 주의점을 소개했습니다. 이api를 사용하여 음악 앱을 실현하는 것은 매우 편리하고 빠릅니다. 그리고 우리는 플레이어를 편리하게 전환할 수 있습니다. 예를 들어
MediaPlayer
,ExoPlayer
등입니다. 건의와 질문이 있으면 블로그에서 스캔하고 QQ그룹 교류를 하는 것을 환영합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.