MediaBrowserCompat.Connect()始终调用onConnectionFailed()回调

时间:2017-02-21 05:03:54

标签: android android-mediaplayer

我正在构建一个Android媒体播放器,它将播放来自URL的无线电流。 一段代码如下:

None

此处public class BaseActivity extends ActionBarCastActivity implements MediaBrowserProvider { private MediaBrowserCompat mMediaBrowser; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mMediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, MusicService.class), mConnectionCallback, null); } @Override protected void onStart() { super.onStart(); mMediaBrowser.connect(); } private final MediaBrowserCompat.ConnectionCallback mConnectionCallback = new MediaBrowserCompat.ConnectionCallback() { @Override public void onConnected() { //setSupportMediaController code } @Override public void onConnectionSuspended() { } @Override public void onConnectionFailed() { Log.d(TAG, "onConnectionFailed"); } }; } 是扩展MusicService的服务,是的,将以下代码放入清单中:

MediaBrowserServiceCompat

运行应用后,它总是调用<service android:name=".playback.RadioPlayerService" android:exported="true" tools:ignore="ExportedService"> <intent-filter> <action android:name="android.media.browse.MediaBrowserService" /> </intent-filter> 回调方法。但发现无法发现连接失败的实际原因。知道如何找到错误吗?

2 个答案:

答案 0 :(得分:1)

遇到类似情况,由于以下原因,连接总是失败;

2020-01-11 18:17:33.760 10560-10560 / com.demo.package I / MediaBrowserService:客户端com.your.package.name的没有根 服务android.service.media.MediaBrowserService $ ServiceBinder $ 1

导致在我的控制器活动上调用 onConnectionFailed

之所以发生这种情况,是因为我使用的是onGetRoot [MediaBrowserServiceCompat]的默认替代实现,该实现最终导致了此问题:

@Nullable
@Override
public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid, @Nullable Bundle rootHints) {

    return null;
}

此实现必须返回具有唯一根ID而不是null的BrowserRoot对象。

@Nullable
@Override
public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid, @Nullable Bundle rootHints) {

    Log.d("MEDIA_BROWSER_SERVICE_COMPAT","onGetRoot() called");

    return new BrowserRoot(
            'YOUR_UNIQUE_MEDIA_ROOT_ID',
            null);
}

YOUR_UNIQUE_MEDIA_ROOT_ID是唯一的字符串标识符,需要传递它,以为控制器挂钩创建新的BrowserRoot。

答案 1 :(得分:0)

回复此问题,因为我遇到了同样的问题,我一直在获取onConnectionFailed结果。事实证明,解决方案是我忘记在AndroidManifest.xml中更新服务的名称。

我认为问题可能与此类似。您确实在清单中声明了服务,但名称设置为&#39; .playback.RadioPlayerService&#39;在创建MediaBrowser时,您需要引用MediaService.class&#39;。尝试替换

android:name=".playback.RadioPlayerService"

android:name=".MusicService"

或者,更新MediaBrowser的实例化以引用RadioPlayerService.class(如果存在)。