Api 23张没有存储权限的照片

Api 23 take picture without storage permissions

我需要在 api 中使用相机 Intent 拍照 23. 我正在请求使用相机 Intent 的许可,但为了限制我需要检查或请求的许可数量我没有' 想将图片保存在应用程序内部存储中。但是将这样的文件传递给相机意图是行不通的。我猜是因为相机无法写入我的应用程序存储空间。

  try {
        mTempImage = File.createTempFile("psn_temp", ".jpg", Controller.getContext().getCacheDir());
        } catch (IOException e) {
            e.printStackTrace();
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempImage));

如果我这样做

File storageDir = Environment.getExternalStorageDirectory();
                    try {
                        mTempImage = File.createTempFile(
                                "psn_temp",  /* prefix */
                                ".jpg",         /* suffix */
                                storageDir      /* directory */
                        );

这可行,但我必须请求存储许可。有没有解决的办法?

使用 Context.getExternalFilesDir(String) 将图片保存到本地外部文件夹。由于 KitKat (api 19),您不需要权限即可写入此外部存储文件夹。在 api19 之前你必须要求 ​R​E​A​D​_​E​X​T​E​R​N​A​L​_​S​T​O​R​A​G​E​,所以如果你想支持更早的 apis 添加到你的清单:

​ ​ ​ ​<​u​s​e​s​-​p​e​r​m​i​s​s​i​o​n​ ​a​n​d​r​o​i​d​:​n​a​m​e​=​"​a​n​d​r​o​i​d​.​p​e​r​m​i​s​s​i​o​n​.​R​E​A​D​_​E​X​T​E​R​N​A​L​_​S​T​O​R​A​G​E​"​
 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​a​n​d​r​o​i​d​:​m​a​x​S​d​k​V​e​r​s​i​o​n​=​"​1​8​"​
 ​ ​ ​ ​ ​ ​ ​ ​/​>​

你也不需要 WRITE_* 权限,因为你不是在写 - 相机应用正在做这个。

有关 getCacheDir 为何不起作用的解释,请看这里:

Camera Intent not saving photo