首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android10及以上版本中如何通过intent MediaStore.ACTION_IMAGE_CAPTURE获取图片URI

在Android10及以上版本中如何通过intent MediaStore.ACTION_IMAGE_CAPTURE获取图片URI
EN

Stack Overflow用户
提问于 2021-02-12 13:49:14
回答 3查看 1.1K关注 0票数 0

对于版主:我知道已经有这样的问题了,但是所有这些方法都是通过data.getExtra("data")提供位图,实际上它只是thumbnail。我想获得URI,而不是位图,我需要获得实际图像的URI,而不是它的缩略图,方法在2021中可用。请在将问题标记为重复之前考虑此问题!

我正在从摄像头获取图像,它在低端设备上工作得很好,但当只在安卓10和11中调用onActivityResult时,它在数据中给出了null。

这就是我正在做的

代码语言:javascript
运行
复制
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, ACTION_REQUEST_CAMERA)

这是我的onActivityResult

代码语言:javascript
运行
复制
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK && requestCode == ACTION_REQUEST_CAMERA) {

            data?.data?.let { uri ->
                 Toast.makeText(context, "Got URI", Toast.LENGTH_LONG).show()
            }
        }
    }
EN

回答 3

Stack Overflow用户

发布于 2021-02-12 14:02:46

您应该将自己的uri (路径)传递给具有操作MediaStore.ACTION_IMAGE_CAPTURE的intent

代码语言:javascript
运行
复制
putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(
    applicationContext,
    "$packageName.your_file_provider",
    File("path/to")
))
addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)

有关FileProvider的更多信息

票数 1
EN

Stack Overflow用户

发布于 2021-02-12 20:27:55

这种方法对我很有效。

Manifest文件中

代码语言:javascript
运行
复制
     <application>
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.android.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths">
            </meta-data>
        </provider>
     ...
     </application

创建了一个文件/res/xml/file_paths.xml并在其中指定了路径

代码语言:javascript
运行
复制
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path name="my_images" path="Pictures" />
</paths>

在我的activity

创建了一个全局变量var cameraPhotoFilePath: Uri? = null

这就是我如何启动相机活动以获得结果

代码语言:javascript
运行
复制
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
                val photoFile: File? = try {
                    createImageFileInAppDir()
                } catch (ex: IOException) {
                    // Error occurred while creating the File
                    null
                }

                photoFile?.also { file ->
                    val photoURI: Uri = FileProvider.getUriForFile(
                        this,
                        "com.example.android.provider",
                        file
                    )
                    cameraPhotoFilePath = photoURI
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
                }
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
                startActivityForResult(intent, ACTION_REQUEST_CAMERA)

下面是我在上述代码中使用的辅助函数

代码语言:javascript
运行
复制
@Throws(IOException::class)
    private fun createImageFileInAppDir(): File {
        val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
        val imagePath = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
        return   File(imagePath, "JPEG_${timeStamp}_" + ".jpg")
    }

onActivityResult的末尾,这就是我如何获得图像Uri的

代码语言:javascript
运行
复制
if (resultCode == RESULT_OK && requestCode == ACTION_REQUEST_CAMERA) {
        cameraPhotoFilePath?.let { uri -> 
            // here uri is image Uri that was captured by camera
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2021-02-12 14:48:06

Android开发人员有关于如何获取全尺寸照片的很好的文档。您还可以访问此链接Get full size image获取全尺寸图像.Please的uri

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

https://stackoverflow.com/questions/66166944

复制
相关文章

相似问题

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