为啥连接到 mediaBrowser 时没有调用 connectionCallback.onConnected()?
Posted
技术标签:
【中文标题】为啥连接到 mediaBrowser 时没有调用 connectionCallback.onConnected()?【英文标题】:Why is connectionCallback.onConnected() not called when connecting to mediaBrowser?为什么连接到 mediaBrowser 时没有调用 connectionCallback.onConnected()? 【发布时间】:2020-09-16 15:10:20 【问题描述】:我刚开始自学 android 音频开发,我很困惑为什么这里既没有调用 connectionCallback 的 onConnected 方法也没有调用 onConnectionFailed 方法。 PodcastService 被实例化并调用了它的 onGetRoot 方法,但是没有调用回调。没有给出错误信息;根本没有调用回调。任何帮助都会很棒!
MainActivity.kt:
package com.davidwillett.audioapp
import android.content.ComponentName
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.media.MediaBrowserCompat
class MainActivity : AppCompatActivity()
private val connectionCallback = object : MediaBrowserCompat.ConnectionCallback()
override fun onConnected()
println("ConnectionCallback.onConnected")
super.onConnected()
override fun onConnectionFailed()
println("ConnectionCallback.onConnectionFailed")
super.onConnectionFailed()
private lateinit var mediaBrowser: MediaBrowserCompat
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mediaBrowser = MediaBrowserCompat(
this,
ComponentName(this, PodcastService::class.java),
connectionCallback,
null)
override fun onStart()
println("MainActivity.onStart")
super.onStart()
mediaBrowser.connect()
override fun onStop()
println("MainActivity.onStop")
super.onStop()
mediaBrowser.disconnect()
播客服务.kt:
package com.davidwillett.audioapp
import android.os.Bundle
import android.support.v4.media.MediaBrowserCompat
import androidx.media.MediaBrowserServiceCompat
class PodcastService : MediaBrowserServiceCompat()
override fun onGetRoot(
clientPackageName: String,
clientUid: Int,
rootHints: Bundle?
): BrowserRoot?
println("PodcastService.onGetRoot")
return BrowserRoot("root", null)
override fun onLoadChildren(
parentId: String,
result: Result<MutableList<MediaBrowserCompat.MediaItem>>
)
TODO("Not yet implemented")
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.davidwillett.audioapp">
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".PodcastService"
android:exported="false">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
</application>
</manifest>
【问题讨论】:
【参考方案1】:抱歉,我的研究做得不够好!
UAMP 演示项目中的一条评论指出:“为了调用 MediaBrowserCompat.ConnectionCallback.onConnected,需要在 MediaBrowserServiceCompat 上设置 MediaSessionCompat.Token。”
所以这就是缺少的东西!
【讨论】:
以上是关于为啥连接到 mediaBrowser 时没有调用 connectionCallback.onConnected()?的主要内容,如果未能解决你的问题,请参考以下文章
为啥其他东西通过 Interface Builder xib 调用连接到 UIBarButtonItem 的方法?
为啥我的 android 设备无法连接到 charles 代理,但在我连接到 Fiddler 代理时可以工作?