미디어 브라우저 서비스 정보(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에 따라 라이센스가 부여됩니다.