gpt4 book ai didi

android - 相机 Intent 不保存照片

转载 作者:IT王子 更新时间:2023-10-28 23:27:24 24 4
gpt4 key购买 nike

我之前成功使用过此代码 fragment ,但文件指向 SD 卡上的某个位置。

final File temp = new File(getCacheDir(), "temp.jpg");
temp.delete();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(temp));
startActivityForResult(intent, CONFIG.Intents.Actions.SELECT_CAMERA_PHOTO);

但是,当我使用 getCacheDir 而不是 SD 卡上的 loc 时,似乎永远不会保存照片。这是缓存目录和图像捕获的限制吗?

最佳答案

从技术上讲,这是因为在使用相机应用程序捕获图像时不支持写入内部存储。事实上,您可能会注意到 logcat 中打印的异常声明 不支持写入内部存储。但是,这不起作用的真正原因是因为默认情况下,您正在创建一个专用于您的应用程序包的文件,而另一个应用程序(即相机应用程序)无法访问该文件位置,因为它没有权限这样做。外部存储是文件系统中唯一可全局访问的部分。

解决方法是让您创建具有全局 (WORLD_WRITEABLE) 权限的文件。通常,这允许相机应用程序通过传递的 Uri 访问文件。没有真正的方法可以直接在 File 上执行此操作,因此您必须使用 Context 中可用的方法创建文件,然后再获取它的句柄:

//Remove if exists, the file MUST be created using the lines below
File f = new File(getFilesDir(), "Captured.jpg");
f.delete();
//Create new file
FileOutputStream fos = openFileOutput("Captured.jpg", Context.MODE_WORLD_WRITEABLE);
fos.close();
//Get reference to the file
File f = new File(getFilesDir(), "Captured.jpg");

这也限制了您可以放置​​文件的位置,因为 Context 方法固有地在根"file"目录中创建文件,并且您无法将其重定向到缓存目录。

HTH

关于android - 相机 Intent 不保存照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com