ActivityResultContracts.CaptureVideo() аварийно завершает работу с DeadObjectExceptions в API 33?
Я пытаюсь использовать ActivityResultContracts.CaptureVideo(), но когда я запускаю его в API 33, происходит сбой с этой трассировкой стека:
> 2022-09-19 20:32:02.047 577-601/system_process W/WindowManager: Exception thrown during dispatchAppVisibility Window{5b4304c u0
> com.my.package/com.my.package.activities.MainActivity
> EXITING}
> android.os.DeadObjectException
> at android.os.BinderProxy.transactNative(Native Method)
> at android.os.BinderProxy.transact(BinderProxy.java:584)
> at android.view.IWindow$Stub$Proxy.dispatchAppVisibility(IWindow.java:536)
> at com.android.server.wm.WindowState.sendAppVisibilityToClients(WindowState.java:3489)
> at com.android.server.wm.WindowContainer.sendAppVisibilityToClients(WindowContainer.java:1199)
> at com.android.server.wm.WindowToken.setClientVisible(WindowToken.java:398)
> at com.android.server.wm.ActivityRecord.setClientVisible(ActivityRecord.java:6564)
> at com.android.server.wm.ActivityRecord.postApplyAnimation(ActivityRecord.java:5280)
> at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:5235)
> at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:5239)
> at com.android.server.wm.AppTransitionController.handleClosingApps(AppTransitionController.java:1098)
> at com.android.server.wm.AppTransitionController.handleAppTransitionReady(AppTransitionController.java:286)
> at com.android.server.wm.RootWindowContainer.checkAppTransitionReady(RootWindowContainer.java:975)
> at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:842)
> at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:784)
> at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:177)
> at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:126)
> at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:115)
> at com.android.server.wm.WindowSurfacePlacer$Traverser.run(WindowSurfacePlacer.java:57)
> at android.os.Handler.handleCallback(Handler.java:942)
> at android.os.Handler.dispatchMessage(Handler.java:99)
> at android.os.Looper.loopOnce(Looper.java:201)
> at android.os.Looper.loop(Looper.java:288)
> at android.os.HandlerThread.run(HandlerThread.java:67)
> at com.android.server.ServiceThread.run(ServiceThread.java:44)
Соответствующий код выглядит так:
private fun takeVideo() {
val media = File.createTempFile("temp_file", ".mp4", this.requireContext().cacheDir)
val fileUri = FileProvider.getUriForFile(this.requireContext(), "${requireContext().packageName}.provider", media)
this.fileUri = Uri.parse(media.absolutePath)
this.takeVideoResult.launch(fileUri)
}
/**
* A function to handle registering an activity result for video capture
*/
private val takeVideoResult = registerForActivityResult(ActivityResultContracts.CaptureVideo()) { success ->
if (success) {
this.fileUri?.let { uri ->
this.attachmentUris.add(uri)
this.updateAttachmentViews()
}
}
}
Это проблема с API 33? Кажется, что все другие уровни API, поддерживаемые нашим приложением, работают нормально (в частности, я также протестировал API 32, 30 и 28). Есть ли что-то очевидное, что я упускаю из виду, что я делаю неправильно, что может это исправить?