我有一个Android Auto应用程序.我想利用分页在应用程序内浏览.您似乎可以通过获取对MediaBrowserCompat的引用并在.subscribe()中传递这些常量来设置EXTRA_PAGE和EXTRA_PAGE_SIZE.但是,我无法弄清楚如何获取Android Auto Audio用于调用.subscribe()的MediaBrowserCompat的引用.
对于一些应该简单的事情来说,这似乎太复杂了,我只是在思考这些事情吗?
pagination android-auto mediabrowserservice mediabrowserservicecompat mediabrowser
我正在尝试向其他媒体应用公开媒体项目,这些应用可以通过我的MediaBrowserServiceCompat服务浏览我的应用内容。在我的onLoadChildren方法中,我正在构建 MediaBrowserCompat.MediaItem一个MediaDescriptionCompat包含Bundle一些我需要播放该项目的额外内容的 。
public class Service extends MediaBrowserServiceCompat {
...
@Override
public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) {
val bundle = Bundle().apply {
putString("extra", "some value")
}
MediaDescriptionCompat description = new MediaDescriptionCompat.Builder()
.setMediaId(mediaId)
.setExtras(bundle)
.setTitle("title")
.setSubtitle("subtitle")
.setIconUri(uri)
.build();
MediaBrowserCompat.MediaItem item = new MediaBrowserCompat.MediaItem(description, MediaBrowserCompat.MediaItem.FLAG_PLAYABLE);
val items = ArrayList<MediaBrowserCompat.MediaItem>()
items.add(item)
result.sendResult(items)
}
Run Code Online (Sandbox Code Playgroud)
因此,在onPlayFromMediaId(String mediaId, Bundle extras)用户单击该项目时收到的回调中,我得到了正确的结果,mediaId但这extras是一个空包。
private class MediaSessionCallback extends MediaSessionCompat.Callback {
...
@Override …Run Code Online (Sandbox Code Playgroud) 我的服务:
public class MusicService extends MediaBrowserServiceCompat {
...
}
Run Code Online (Sandbox Code Playgroud)
我的活动:
public class MediaActivity extends AppCompatActivity{
private MediaBrowserCompat mMediaBrowser;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMediaBrowser = new MediaBrowserCompat(this,
new ComponentName(this, MusicService.class), mConnectionCallback, null);
mMediaBrowser.connect();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMediaBrowser.disconnect();
}
Run Code Online (Sandbox Code Playgroud)
我想在 UI 中添加关闭按钮,但如何停止MusicService?它继续在后台进行投射。
android android-mediaplayer mediabrowserservice mediabrowserservicecompat mediabrowser
在MediaServiceBrowseror中MediaServiceBrowserCompat,有两种方法:
public abstract void onLoadChildren (String parentId,
Result<List<MediaBrowser.MediaItem>> result)
和
public void onLoadChildren (String parentId,
Result<List<MediaBrowser.MediaItem>> result,
Bundle options)
options描述为:
Bundle:从媒体浏览器发送的特定于服务的参数包。通过结果返回的信息应该受到该包内容的影响。该值绝不能为空。
我希望向(正在加载其子级的)MediaDescriptionCompat提供额外的内容,以便在第二次调用中将它们呈现出来。MediaItem
但是,仅调用第一个方法,如在 Android Auto 下测试的那样。
我需要做什么才能因options争论而被叫去?
android mediabrowserservice mediabrowserservicecompat mediabrowser
我正在尝试使用 MediaBrowser 从活动连接到 MediaBrowserService。但是,我的onConnected回调似乎从未被调用以允许我设置MediaController并开始操作播放。
在我的播放器/浏览器活动中:
private final MediaBrowserCompat.ConnectionCallback mConnectionCallback =
new MediaBrowserCompat.ConnectionCallback() {
@Override
public void onConnected() {
try {
mMediaController =
new MediaControllerCompat(
PlayActivity.this,
mMediaBrowser.getSessionToken()
);
mMediaController.registerCallback(mControllerCallback);
mControllerCallback
.onMetadataChanged(mMediaController.getMetadata());
mControllerCallback
.onPlaybackStateChanged(mMediaController.getPlaybackState());
} catch (RemoteException e) {
throw new RuntimeException(e);
}
mMediaController
.getTransportControls()
.prepareFromUri(
Uri.parse(
getIntent()
.getStringExtra(StreamingService.STREAM_URI)),
getIntent().getExtras());
mMediaController
.getTransportControls().play();
buildTransportControls();
}
@Override
public void onConnectionSuspended() { }
@Override
public void onConnectionFailed() { }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); …Run Code Online (Sandbox Code Playgroud) android android-activity foreground-service mediabrowserservice mediabrowser