首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PlayerNotificationManager没有在安卓13上工作

PlayerNotificationManager没有在安卓13上工作
EN

Stack Overflow用户
提问于 2022-11-18 09:44:57
回答 1查看 58关注 0票数 0

我是android开发的新手,我正在构建一个支持后台播放视频的应用程序。我决定通过Exo和PlayerNotificationManager来做。在Android 12和更低版本上,一切都很好,但是在Android 13上,通知根本不想显示,有什么想法吗?

我使用MVVM架构,在视图模型的init方法中初始化exoPlayer和playerNotificationManager

初始化代码:

代码语言:javascript
复制
playerNotificationManager = PlayerNotificationManager.Builder(
    getApplication<Application>().applicationContext,
    1,
    EXO_PLAYER_CHANNEL_ID)
        .setSmallIconResourceId(R.drawable.racoon)
        .setMediaDescriptionAdapter(mediaDescriptionAdapter)
        .setFastForwardActionIconResourceId(R.drawable.ic_forward_10sec)
        .setRewindActionIconResourceId(R.drawable.ic_replay_10sec)
        .build()

之后,在我的片段中,我在exoPlayer和onStop方法中将playerNotificationManager分配给playerNotificationManager:

代码语言:javascript
复制
override fun onResume() {
        super.onResume()
        Log.d("MyLog", "onResume")
        if (videoViewModel.playerNotificationManager != null){
            videoViewModel.playerNotificationManager?.setPlayer(null)
        }
    }

    override fun onStop() {
        super.onStop()
        Log.d("MyLog", "onStop")
        videoViewModel.playerNotificationManager?.setPlayer(videoViewModel.exoPlayer)
    }

此外,我还试图在我的清单中注册以下权限:

代码语言:javascript
复制
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

但是结果保持不变,android 13根本不想显示我的通知。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-18 16:11:17

基于@primo注释和此链接:

我做了以下工作来解决我的问题:

在我的片段的onCreate方法中:

代码语言:javascript
复制
if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) {
        val launcher = registerForActivityResult(
            ActivityResultContracts.RequestPermission()
        ) { isGranted: Boolean? ->
            notificationGranted = isGranted == true
        }
        launcher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }

在onStop方法中:

代码语言:javascript
复制
if(VERSION.SDK_INT >= VERSION_CODES.TIRAMISU && !notificationGranted){
        videoViewModel.exoPlayer.pause()
    }
    videoViewModel.playerNotificationManager?.setPlayer(videoViewModel.exoPlayer)

然后一切都很好。

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

https://stackoverflow.com/questions/74487687

复制
相关文章

相似问题

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