首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在连接到mediaBrowser时不调用connectionCallback.onConnected()?

为什么在连接到mediaBrowser时不调用connectionCallback.onConnected()?
EN

Stack Overflow用户
提问于 2020-09-16 23:10:21
回答 1查看 198关注 0票数 1

我刚刚开始自学Android音频开发,我很困惑为什么这里没有调用connectionCallback的onConnected和onConnectionFailed方法。实例化PodcastService并调用其onGetRoot方法,但不调用回调。没有给出错误消息;只是不调用回调。任何帮助都是最好的!

MainActivity.kt:

代码语言:javascript
复制
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()
    }
}

PodcastService.kt:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

发布于 2020-09-17 01:36:05

对不起,我的研究做得不够好!

UAMP演示项目中的一条注释指出:“为了调用MediaBrowserCompat.ConnectionCallback.onConnected,需要在MediaBrowserServiceCompat上设置一个MediaSessionCompat.Token。”

所以这就是我们所缺少的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63923003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档