提问人:BejanCorneliu 提问时间:11/16/2023 最后编辑:BejanCorneliu 更新时间:11/16/2023 访问量:48
Android media3 startForground 崩溃
Android media3 startForground crash
问:
我有一个媒体播放器应用程序。我正在使用 MediaSessionService。在 onCreate() 中,我创建了 Exoplayer 实例。
mTrackSelector = DefaultTrackSelector(this)
mTrackSelector.parameters = mTrackSelector.parameters
.buildUpon()
.setPreferredAudioLanguage("en")
.setPreferredTextLanguage("en")
.build()
val mAudioAttr = AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.AUDIO_CONTENT_TYPE_SPEECH)
.build()
mPlayer = ExoPlayer.Builder(this)
.setSeekBackIncrementMs(30000)
.setSeekForwardIncrementMs(30000)
.setTrackSelector(mTrackSelector)
.setAudioAttributes(mAudioAttr, true)
.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT)
.build()
之后,我使用 ForwardingPlayer 创建 MediaSession 来调整控件
mMediaSession = MediaSession.Builder(this, forwardingPlayer)
.setId(System.currentTimeMillis().toString().takeLast(5))
.setCallback(librarySessionCallback).build()
就我的测试而言,运行并发布 media3 控件通知对我的播放器来说都很好。不使用用户权限进行通知或使用推送通知。我在 android 8-14 上测试它。在模拟器中的 android 13 上测试
问题出在生产中,我收到抛出的 Firebase Crashlitycs raports 关于:
Fatal Exception:
android.app.RemoteServiceException$ForegroundServiceDidNotStartInTimeException
Context.startForegroundService() did not then call Service.startForeground():
ServiceRecord{4e0c02b u0 xx.xxxxx.PlayerService}
在 Android 13 上
我没有实现任何 MediaSessionServiceListener 并覆盖 onForegroundServiceStartNotAllowedException,因为在我在手机和模拟器上的 android 13 及更高版本上的测试中没有崩溃。对于测试,我实现了这些,但我仍然没有崩溃或任何登录
override fun onForegroundServiceStartNotAllowedException() {
Log.d("testCrash", "*) ------> CRASH!! CRASH!!")
}
我做错了什么?在我的手机上,它没有崩溃 如何重现崩溃?onForegroundServiceStartNotAllowedException 未在我的手机的任何 android 13-14 上调用
在 gradle 中,我有 compileSdk 34 和 targetSdk 34
我注意到 YouTube Premium 不要求任何通知权限,我可以在我的 android 13 和 14 手机上使用后台音频
谢谢
LE:我使用以下命令启动我的服务:
val mSessionToken = SessionToken(nInterface.getActivity(), ComponentName(nInterface.getActivity(), PlayerService::class.java))
我的AndroidManifest:
<service android:name=".engine.notification.PlayerService"
android:foregroundServiceType="mediaPlayback"
android:stopWithTask="true"
android:exported="true">
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService"/>
</intent-filter>
</service>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
答: 暂无答案
评论