我需要读/写外部来将照片存储在 getExternalFilesDir(...) 中吗?

问题描述 投票:0回答:1

在针对 Android 33 并在 Android 33 上运行时启动相机意图时遇到问题。

我正在使用文件提供程序来创建文件并将其传递到相机

清单:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

文件路径:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <cache-path name="attachments" path="attachments/"/>
    <cache-path name="geopackage" path="geopackage/"/>
    <external-files-path name="pictures" path="Pictures"/>
    <external-files-path name="videos" path="Movies"/>
    <external-files-path name="audio" path="Music"/>
</paths>

权限请求

  private val requestImagePermission = registerForActivityResult(
    ActivityResultContracts.RequestPermission()
  ) { result ->
    this.onPermission(result)
  }

图片请求

  private val getImage = registerForActivityResult(
    ActivityResultContracts.TakePicture()
  ) { status ->
    onMediaResult(status)
  }

启动相机意图

private fun launchCameraIntent() {
  val file = File.createTempFile(
    UUID.randomUUID().toString(),
    ".jpg",
    getExternalFilesDir(Environment.DIRECTORY_PICTURES)
  )

  val uri = FileProvider.getUriForFile(applicationContext, applicationContext.packageName + ".fileprovider", file)

  currentMediaPath = file.absolutePath
  getImage.launch(uri)
}

系统会提示我获取相机许可并接受。然而,在启动相机后,我得到:

需要许可。要使用相机,请打开相机、麦克风,然后 存储权限。

使用旧的权限 API,当仅请求相机权限和存储权限时,效果很好。然而,我的印象是,存储在 getExternalFilesDir 中不需要请求存储权限。

有什么想法吗?

android android-permissions android-camera-intent
1个回答
0
投票

但是我的印象是,存储在 getExternalFilesDir 中不需要请求存储权限。

正确。但是,该对话框不是来自平台,而是来自特定的相机应用程序。他们可能没有考虑到

ACTION_IMAGE_CAPTURE
/
ActivityResultContracts.TakePicture
场景,其中调用者有责任提供可写的位置。

© www.soinside.com 2019 - 2024. All rights reserved.