如何访问 MediaBrowserServiceCompat 服务的实例?

2023-11-25

令人惊讶的是,我正在努力获取源自以下内容的服务实例:MediaBrowserServiceCompat.

对于典型的服务,为了实现这一点,使用本地绑定器

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.

当我尝试提供本地活页夹时,如上所示,服务崩溃了MediaBrowserServiceCompat期望有自己的自定义活页夹并具有附加功能。这是崩溃堆栈跟踪

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超级类,如下所示,但仍然行不通。

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 服务实例的方法是什么?

需要明确的是,播放功能对我来说运行良好。问题是如何获取对该服务的引用,以便我可以调用该服务上的自定义公共方法。


正如你发现的那样,MediaBrowserServiceCompat已经是一个绑定服务 - 你不能也不应该覆盖onBind().

相反,您必须连接到您的MediaBrowserServiceCompat with a MediaBrowserCompat as per 文档。连接后,您可以触发自定义方法,例如doMagic by:

  1. 创建一个MediaControllerCompat从你的MediaBrowserCompat实例,如下文档
  2. Call sendCommand,传入一个command唯一标识您的命令的字符串(例如,doMagic)、您希望传递给该方法的任何参数以及ResultReceiver如果你想要一个返回值。
  3. In the MediaSessionCompat.Callback注册到您的MediaBrowserServiceCompat, 覆盖onCommand()并处理命令(例如,通过调用doMagic).

这种方法的一个例子在这篇博文

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问 MediaBrowserServiceCompat 服务的实例? 的相关文章

随机推荐

  • git local master分支停止跟踪remotes/origin/master,无法推送

    就在我以为我已经掌握窍门的时候git checkout b newbranch 提交 提交 提交 git checkout master git merge newbranch git rebase i master git Pushgit
  • 如何在 PyCharm 中远程调试

    我现在面临的问题是 我通过 SSH 在远程主机上部署 Python 代码 脚本传递一些参数并且必须由特定用户运行 我创建的 PyCharm 运行 调试配置通过不同用户通过 SSH 连接 无法与实际运行脚本的用户连接 我想通过 PyCharm
  • 找不到用于签名配置“调试”的密钥库文件 D\Telegram-master\TMessagesProj\config\release.keystore

    我下载了新版本的 Telegram 当运行它时 出现此错误 Keystore file D Telegram master TMessagesProj config release keystore not found for signin
  • Android HttpClient Cookie

    Android HttpClient 是否可以自动管理 cookie 它确实支持它 阅读下面的帖子 似乎在调用执行时必须传递相同的 HttpContext response httpClient execute httpPost local
  • 不必要的水平滚动条jqGrid

    在我的 jqGrid 使用版本 4 0 0 中 我得到了一个不必要的水平滚动条 但也有一个垂直滚动条 此问题仅出现在 Chrome 和 Firefox 中 但不会出现在 Internet Explorer 中 看起来表格宽度的计算有问题 因
  • Java Swing:实现输入值的有效性检查

    在我的 Swing 应用程序中 用户必须在切换到下一个窗口之前插入数字和值 现在 作为一个干净的程序应该检查每个输入是否有效 如果无效 则会显示错误消息并且不会打开下一个窗口 该检查的结构如下 示例 Button buttonToOpenN
  • 使用 .htaccess 从 URL 中删除 PHP 文件扩展名

    我刚刚在 Ubuntu 12 上安装完 LAMP 堆栈 并遇到了 Apache 的 htaccess 文件的问题 我启用了重写和重定向 mods 并且 htaccess 文件正在工作 如果不存在 www URI 将重定向到 www 但无论我
  • 如何使用 GWT 检查给定的图像 URL 是否存在?

    我想检查给定的 URL 是否存在并且它是一个图像 以便创建一个new Image String url 从中 如果给定的 URL 不是图像 那么它应该返回错误 我一直在寻找同样的东西 我想确定何时未从 URL 加载图像 有一个 ErrorH
  • 如何使用 Angular 动态加载 CSS

    在过去的几天里 我一直在尝试解决这个问题的几个答案 建议和教程 但不幸的是他们都没有成功 最接近的是这样的 https juristr com blog 2019 08 dynamically load css angular cli 但它
  • 如何交换字符串中的两个字符?

    我想写一个函数如下 输入 字符串 A int i 0 输出 将 i 1 处的字符与 i 处的字符交换的字符串 A 什么是clean能够实现这一目标的解决方案 我目前的解决方案是 let mut swapped input str 0 i t
  • React中createStore和createStoreWithMiddleware有什么区别?

    我找到了两种配置 redux createStore 的方法 1 https github com TeamWithBR SampleProjectTodo blob master src store configureStore js 2
  • ASP.NET MVC - 填充下拉列表

    我是 ASP NET MVC 新手 我试图弄清楚如何根据数据库中的值创建基本下拉列表 在 ASP NET Web 表单中 我知道我可以加载如下下拉列表 页面 aspx
  • 检查数组是否有一个或多个空值[重复]

    这个问题在这里已经有答案了 我有数组 var 如果数组中的一个或多个元素为空 我的意思是 字符串是 我想返回 FALSE 我觉得array filter 是更好的方法 但我不知道如何以这种方式过滤它 我该怎么做 函数emptyElement
  • 仅使用内置库使用 Python 制作基本的网络抓取工具 - Python

    学习Python 我试图制作一个没有任何第三方库的网络爬虫 这样这个过程对我来说就不会被简化 而且我知道我在做什么 我浏览了一些在线资源 但所有这些资源都让我对某些事情感到困惑 html 看起来像这样 lots of other div t
  • 有没有一个公式可以将纬度和经度转换为单个数字?

    你能告诉我是否有一个公式可以将纬度和经度转换为单个数字 我计划将其用于提供交付路由的软件中的数据库表 表行将包含该号码以及邮政地址 数据库表将按数字升序排序 以便软件可以找出卡车需要前往第一个 第二个等的地址 请您回复显示 VB 或 VB
  • 如何指定运行脚本的python版本?

    我现在正在使用预装 python 2 7 5 的 mac 学习 python 但我也安装了最新的3 4 我知道如何选择在命令行模式下使用哪个解释器 即 python vs python 3 将调出各自的解释器 但是 如果我只是编写一个包含此
  • 自定义自动隐藏浮动操作按钮行为不起作用

    我试图在 NestedScrollView 向下滚动时隐藏 FloatingActionButton 并在 NestedScrollView 向上滚动时显示自身 这是我的布局
  • 如何内省 Django 中的属性和模型字段?

    我正在尝试获取给定对象的所有现有模型字段和属性的列表 有没有一种干净的方法来内省对象 以便我可以获得字段和属性的字典 class MyModel Model url models TextField def get location sel
  • 将 JTextField 输入转换为 Integer

    我是 JAVA 新手 我试图将 JTextField 的输入转换为整数 我尝试了很多选项 但没有任何效果 Eclipse 总是给我一个错误 并且这些错误对我来说没有意义 导入java awt Graphics 导入java awt Colo
  • 如何访问 MediaBrowserServiceCompat 服务的实例?

    令人惊讶的是 我正在努力获取源自以下内容的服务实例 MediaBrowserServiceCompat 对于典型的服务 为了实现这一点 使用本地绑定器 class MyService extends MediaBrowserServiceC