1

Android 11强制规定范围存储。在这种情况下,我希望我的应用程序拍摄一张照片并将其保存到某种应用程序保留的内存中,以便从图库中删除该图片时仍然可用。我正在使用以下方法

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri outputFileUri = Uri.fromFile(newFile);
if (android.os.Build.VERSION.SDK_INT >= 24) {
   outputFileUri = FileProvider.getUriForFile(myActivity, BuildConfig.APPLICATION_ID + ".provider", newFile);
   cameraIntent.setFlags(FLAG_GRANT_READ_URI_PERMISSION);
   cameraIntent.setFlags(FLAG_GRANT_WRITE_URI_PERMISSION);
}
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

问题归结为我如何newFile在上面的代码段中创建,因为getExternalStoragePublicDirectory()由于范围存储而不再可用。我已经阅读了文档和各种帖子,但这个问题似乎很广泛和模糊。请避免发布指向MediaStoreAPI 的裸链接。

4

1 回答 1

0

您可以改用 SAF(存储访问框架)。

使用 SAF 创建文件:

Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_TITLE, "myImage.jpg");

startActivityForResult(intent, your-request-code);

然后在onActivityResult中抓取uri:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == your-request-code && resultCode == Activity.RESULT_OK && data != null) {
        Uri uri = data.getData(); //Do stuff...
    }
}

参考:从共享存储访问文档和其他文件

于 2020-12-02T15:33:29.830 回答