无法在 Android 12 上打开由 MediaStore.ACTION_VIDEO_CAPTURE 捕获的视频

发布于 2025-01-15 15:20:10 字数 1024 浏览 2 评论 0原文

    Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
        takeVideoIntent.resolveActivity(packageManager)?.also {
            startActivityForResult(takeVideoIntent, REQUEST_TAKE_VIDEO)
        }
    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    
        if (requestCode == REQUEST_TAKE_VIDEO && resultCode == RESULT_OK) {
            var videoUri = data?.data
            val intent = Intent(this, AddActivity::class.java)
            intent.putExtra(VIDEO_URI, videoUri);
            startActivity(intent)
        }

    }

在第二个活动中,当我尝试在 videoview 中打开视频的 uri 时 我收到此例外:

java.io.FileNotFoundException: /storage/emulated/0/Movies/.pending-1648411601-VID_20220320_200641.mp4: open failed: EACCES (Permission denied)

我找到了解决该问题的解决方案: 添加到menifest MANAGE_EXTERNAL_STORAGE权限

但Google Play不接受我的应用程序与此权限。

如果有的话,还有哪些替代方案?

    Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
        takeVideoIntent.resolveActivity(packageManager)?.also {
            startActivityForResult(takeVideoIntent, REQUEST_TAKE_VIDEO)
        }
    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    
        if (requestCode == REQUEST_TAKE_VIDEO && resultCode == RESULT_OK) {
            var videoUri = data?.data
            val intent = Intent(this, AddActivity::class.java)
            intent.putExtra(VIDEO_URI, videoUri);
            startActivity(intent)
        }

    }

In the second Activity when I try to open the uri of the video in videoview
I'm Getting this exeption:

java.io.FileNotFoundException: /storage/emulated/0/Movies/.pending-1648411601-VID_20220320_200641.mp4: open failed: EACCES (Permission denied)

I found a solution that solves the problem:
adding to menifest MANAGE_EXTERNAL_STORAGE permission

But google play doesn't accept my app with this permission.

What are the alternatives if any?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鸵鸟症 2025-01-22 15:20:10

理想情况下,这将是一项活动,而不是两项活动,为各个屏幕使用片段或可组合项。

但是,如果您绝对需要将 Uri 获取到应用中的另一个 Activity:

  • 将其附加到您用于通过 启动其他 Activity 的 Intent setData()

  • Intent.FLAG_GRANT_READ_URI_PERMISSION 添加到 Intent

val intent = Intent(this, AddActivity::class.java)
    .setData(videoUri)
    .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

AddActivity 将在 Intent 上调用 getData() > 检索 Uri

如果没有这种方法,AddActivity 无权访问该内容

Ideally, this would be one activity, not two, using fragments or composables for the individual screens.

However, if you absolutely need to get the Uri to another activity in your app:

  • Attach it to the Intent you use to start that other activity via setData()

  • Add Intent.FLAG_GRANT_READ_URI_PERMISSION to the Intent

val intent = Intent(this, AddActivity::class.java)
    .setData(videoUri)
    .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

AddActivity would call getData() on the Intent to retrieve the Uri.

Without this approach, AddActivity has no rights to access the content.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文