Android 如何访问MediaBrowserServiceCompat服务的实例?
令人惊讶的是,我很难获得一个源于Android 如何访问MediaBrowserServiceCompat服务的实例?,android,android-service,android-mediaplayer,android-support-library,android-service-binding,Android,Android Service,Android Mediaplayer,Android Support Library,Android Service Binding,令人惊讶的是,我很难获得一个源于mediabrowservicecompat的服务实例 对于典型的服务,要实现这一点,需要使用本地活页夹 class MyService extends MediaBrowserServiceCompat { class MyBinder extends Binder { public MyService getService() { return MyService.this; } private final MyBinde
mediabrowservicecompat
的服务实例
对于典型的服务,要实现这一点,需要使用本地活页夹
class MyService extends MediaBrowserServiceCompat {
class MyBinder extends Binder {
public MyService getService() {
return MyService.this;
}
private final MyBinder binder = new MyBinder();
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public void doMagic() { // <-- How to call this from activity?
// ...
}
}
// At the activity, for example, this binder is retrieved through
// `onServiceConnected()`, typecast to `MyBinder` and thus
// `getService()` gets us the service instance.
我尝试从
mediabrowservicecompat
super类包装活页夹,如下所示,但仍然不起作用
class MyService extends MediaBrowserServiceCompat {
class MyBinder extends Binder {
public MyService getService() {
return MyService.this;
}
private final WrappingBinder<MyService> binder;
@Override
public IBinder onBind(Intent intent) {
if (binder == null) {
binder = new WrappingBinder(super.onBind(intent));
}
return binder;
}
public void doMagic() { // <-- How to call this from activity or elsewhere?
// ...
}
}
class MyService扩展了MediaBrowserServiceCompat{
类MyBinder扩展了Binder{
公共MyService getService(){
返回MyService.this;
}
专用最终包装装订机;
@凌驾
公共IBinder onBind(意向){
如果(活页夹==null){
绑定器=新的包装器(super.onBind(intent));
}
返回活页夹;
}
public void doMagic(){//正如您所发现的,mediabrowservicecompat
已经是绑定服务-您不能也不应该覆盖onBind()
相反,您必须按照使用MediaBrowserCompat
连接到您的MediaBrowserServiceCompat
。连接后,您可以通过以下方式触发自定义方法,如doMagic
:
从MediaBrowserCompat
实例创建一个MediaControllerCompat
,如下所示
召唤
,传递唯一标识您的命令的命令
字符串(例如,doMagic
),希望传递给方法的任何参数,以及ResultReceiver
(如果需要返回值)
在向您的MediaBrowserServiceCompat
注册的MediaSessionCompat.Callback中,重写并处理该命令(例如,通过调用doMagic
)
此方法的一个示例在中提供。您可以尝试此解决方案(对于快速修复,不推荐):
MediaBrowserServiceCompat
是一项服务。若要创建一个类,MyService将扩展MediaBrowserServiceCompat
遵循。这可能会有所帮助。播放功能对我来说很好。问题是如何获取对该服务的引用,以便我可以调用该服务上的自定义公共方法。Dear ianhanniballake,如何从MediaBrowserServiceCompat通知UI更新,在我的情况下,播放器文件需要在播放前下载到本地,如何通知活动显示/隐藏加载。Thanks@hai-听起来你应该看看EXTRA\u DOWNLOAD\u PROGRESS
常量及其相关方法。你也可以从您通过MediaBrowserServiceCompat上的sendSessionEvent
API向所有连接的MediaBrowserCompat提供的服务非常感谢,这正是我想要的
class MyService extends MediaBrowserServiceCompat {
class MyBinder extends Binder {
public MyService getService() {
return MyService.this;
}
private final WrappingBinder<MyService> binder;
@Override
public IBinder onBind(Intent intent) {
if (binder == null) {
binder = new WrappingBinder(super.onBind(intent));
}
return binder;
}
public void doMagic() { // <-- How to call this from activity or elsewhere?
// ...
}
}
private final MyBinder myBinder = new MyBinder();
@Nullable
@Override
public IBinder onBind(Intent intent) {
if (intent.getBooleanExtra("is_binding", false)) {
return myBinder;
}
return super.onBind(intent);
}
// Bind service in your activity:
Intent intent = new Intent(this, MyPlaybackService.class);
intent.putExtra("is_binding", true);
bindService(intent, this, Context.BIND_AUTO_CREATE);