- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我出乎意料地努力获取派生自 MediaBrowserServiceCompat
的服务实例。
对于典型的服务,要实现这一点,使用本地绑定(bind)器
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.
但是,这不适用于从 MediaBrowserServiceCompat
派生的服务。
当我尝试提供本地 Binder 时,如上所示,服务崩溃,因为 MediaBrowserServiceCompat
需要它自己的具有附加功能的自定义 Binder 。这是崩溃堆栈跟踪
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at android.os.Binder.queryLocalInterface(Binder.java:254)
at android.service.media.IMediaBrowserService$Stub.asInterface(IMediaBrowserService.java:31)
at android.media.browse.MediaBrowser$MediaServiceConnection.onServiceConnected(MediaBrowser.java:793)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1223)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1240)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
我尝试从 MediaBrowserServiceCompat
父类(super class)包装 Binder ,如下所示,但仍然无法正常工作。
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?
// ...
}
}
那么想知道访问 MediaBrowserServiceCompat 服务实例的方法是什么?
需要说明的是,回放功能对我来说运行良好。问题是关于如何获取服务的引用,以便我可以调用该服务上的自定义公共(public)方法。
最佳答案
如您所见,MediaBrowserServiceCompat
已经是一个绑定(bind)服务 - 您不能也不应该覆盖 onBind()
。
相反,您必须根据 the documentation 使用 MediaBrowserCompat
连接到您的 MediaBrowserServiceCompat
.连接后,您可以通过以下方式触发自定义方法,例如 doMagic
:
MediaBrowserCompat
实例创建一个 MediaControllerCompat
,遵循 the documentation sendCommand
,传递一个 command
字符串,它唯一地标识你的命令(比如,doMagic
),你希望传递给方法的任何参数,以及一个 ResultReceiver
如果你想要一个返回值。MediaBrowserServiceCompat
注册的 MediaSessionCompat.Callback
中,覆盖 onCommand()并处理命令(例如,通过调用 doMagic
)。this blog post 中提供了这种方法的示例
关于android - 如何访问 MediaBrowserServiceCompat 服务实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100364/
我是安卓开发新手。我想创建一个以客户端-服务器方式运行的音乐播放器。我现在正在尝试创建服务器部分。我发现我可以使用 MediaBrowserServiceCompat 来实现这一点,正如官方文档 he
我的服务: public class MusicService extends MediaBrowserServiceCompat { ... } 我的 Activity : public class
我创建了一个实现 MediaBrowserServiceCompat 的测试应用程序。我已遵循本指南: https://developer.android.com/guide/topics/media
如何从事件访问我在 MediaBrowserServiceCompat 中定义的公共(public)方法(不是覆盖的方法)? 之前我只使用过服务,所以我可以将它与事件类绑定(bind),然后轻松访问方
我正在开发一个 android auto,但是我在 Service 的 Onbind 方法中的这部分代码有一些问题: public IBinder onBind(Intent arg0) {
我出乎意料地努力获取派生自 MediaBrowserServiceCompat 的服务实例。 对于典型的服务,要实现这一点,使用本地绑定(bind)器 class MyService extends
我正在使用这个 example code构建一个 MediaPlayer 服务。我或多或少地工作,但是如果用户返回到包含媒体控件的 Activity,我需要检测 MediaPlayer 处于什么状态。
我正在开发一个音频播放器。播放器可通过蓝牙控制(暂停、播放……)。接下来我要实现的是通过 MediaBrowserServiceCompat 服务从播放列表中选择轨道。到目前为止,唯一的测试客户是我的
我有一个 Service 使用新的 MediaBrowserServiceCompat 与我的 Player 实现交互。 这是我的服务的 onCreate() @Override public voi
我正在尝试从耳机或汽车控件(播放/暂停/等)接收媒体按钮事件 这在我的应用程序 list 中。 这是我的 Medi
我正在尝试将媒体项目公开给可以通过我的 MediaBrowserServiceCompat 浏览我的应用程序内容的其他媒体应用程序服务。在我的 onLoadChildren我正在构建的方法 Media
我已在我的应用程序中实现了 MediaBrowserServiceCompat。 @Override public BrowserRoot onGetRoot(@NonNull String s, i
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在开发一款使用 Android 架构组件的音频应用。我有一个服务,它扩展了 MediaBrowserServiceCompat 和一个带有 MediaBrowserCompat 的 fragmen
我是 Android 开发的初学者,试图通过实现 MediaBrowser 和 MediaSession 创建一个媒体播放器。 我对 onGetRoot() 和 onLoadChildren() 的功
我一直在忙着更新 universal Android Mediaplayer使用 Compat 库使其在低于 lollipop 的 Android 版本上运行。 这是一个用它们的兼容变体替换大多数类的
我有一个 Android Auto 应用程序。我想利用分页在应用程序内进行浏览。看来您可以通过获取对 MediaBrowserCompat 的引用并在 .subscribe() 中传递这些常量来设置
我是一名优秀的程序员,十分优秀!