小编Yod*_*ltz的帖子

刷新 MediaBrowserService 订阅内容

TL;DR:我已经成功地创建和耦合(通过订阅)一个活动到媒体浏览器服务。此媒体浏览器服务可以继续运行并在后台播放音乐。我希望能够在某个阶段刷新内容,无论是在应用程序再次出现在前台时还是在 SwipeRefreshLayout 事件期间。

我想实现以下功能:

  1. 启动 MediaBrowserServiceCompat 服务。
  2. 从活动中,连接并订阅媒体浏览器服务。
  3. 允许服务在应用程序关闭时继续运行和播放音乐。
  4. 在稍后阶段,或在 SwipeRefreshLayout 事件上,重新连接并订阅服务以获取新鲜内容。

我收到的问题是在 MediaBrowserService 中(在创建订阅后)您只能从 onLoadChildren() 方法调用 sendResult() 一次,因此下次尝试使用相同的根订阅媒体浏览器服务时,第二次调用 sendResult() 时会出现以下异常:

E/UncaughtException: java.lang.IllegalStateException: sendResult() called when either sendResult() or sendError() had already been called for: MEDIA_ID_ROOT
                                                    at android.support.v4.media.MediaBrowserServiceCompat$Result.sendResult(MediaBrowserServiceCompat.java:602)
                                                    at com.roostermornings.android.service.MediaService.loadChildrenImpl(MediaService.kt:422)
                                                    at com.roostermornings.android.service.MediaService.access$loadChildrenImpl(MediaService.kt:50)
                                                    at com.roostermornings.android.service.MediaService$onLoadChildren$1$onSyncFinished$playerEventListener$1.onPlayerStateChanged(MediaService.kt:376)
                                                    at com.google.android.exoplayer2.ExoPlayerImpl.handleEvent(ExoPlayerImpl.java:422)
                                                    at com.google.android.exoplayer2.ExoPlayerImpl$1.handleMessage(ExoPlayerImpl.java:103)
                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                    at android.os.Looper.loop(Looper.java:150)
                                                    at android.app.ActivityThread.main(ActivityThread.java:5665)
                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:822)
                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:712)
Run Code Online (Sandbox Code Playgroud)

我调用以下方法来连接和断开媒体浏览器(同样,第一次连接时一切运行顺利,但在第二次连接时,我不确定如何通过订阅刷新内容):

override fun onStart() {
        super.onStart()

        mMediaBrowser = MediaBrowserCompat(this, ComponentName(this, MediaService::class.java), connectionCallback, null)

        if (!mMediaBrowser.isConnected)
            mMediaBrowser.connect()
}

override …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-mediasession mediabrowserservice mediabrowserservicecompat

5
推荐指数
1
解决办法
2018
查看次数

调用updateProfile()方法后,Firebase用户不再匿名

在Android应用中,我创建了一个匿名用户,稍后在用户决定登录时将此用户的数据迁移到Google/Facebook身份验证帐户.

这一直工作正常,直到使用FirebaseAuth updateProfile()方法,然后在调用isAnonymous()方法时用户不再是匿名的.

从Firebase API文档 - https://developers.google.com/android/reference/com/google/firebase/auth/FirebaseUser.html#isAnonymous():

isAnonymous():

如果用户是匿名的,则返回true; 也就是说,用户帐户是使用signInAnonymously()创建的,并且尚未链接到另一个具有linkWithCredential(AuthCredential)的帐户.

FirebaseUser updateProfile()方法:

FirebaseAuth.getInstance().currentUser?.updateProfile(
                UserProfileChangeRequest.Builder()
                .setDisplayName("Anonymous User")
                .build())
Run Code Online (Sandbox Code Playgroud)

调用上面的方法,以便稍后在应用程序中我可以检查匿名用户的显示名称并将其写入数据库等.

根据API文档,在调用linkWithCredential()或用户使用auth提供程序方法登录的阶段之前,用户被视为匿名用户,那么为什么updateProfile()方法会使匿名用户不再是匿名用户?

android firebase firebase-authentication

5
推荐指数
1
解决办法
453
查看次数