我正在构建一个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>
回调方法。但发现无法发现连接失败的实际原因。知道如何找到错误吗?
答案 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(如果存在)。