在android中读写文件所需的权限是。
需要将这些权限添加到您的 AndroidManifest.xml 中
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在你的场景中,你不需要做任何事情,因为这已经由库处理了
https://pub.dev/packages/image_picker
上述库不会将图像保存在外部存储中。
注意:使用相机拍摄的图像和视频会保存到您的
应用程序的本地缓存,因此应该只
暂时左右。如果您需要存储您选择的图像
永久,您有责任将其移至更永久的
位置。
更多信息可以参考这个链接
https://guides.codepath.com/android/Accessing-the-Camera-and-Stored-Media#accessing-stored-media
更新:image_picker for Android 内部如何处理图像拾取
对于图库 使用 ACTION_GET_CONTENT(about action get content) 选择它在内置文件选择器意图中打开
使用ACTION_GET_CONTENT 打开文件时 - 因为用户参与选择您的应用可以访问的文件或目录,所以这种机制不需要任何系统权限。你可以阅读更多关于when permission is needed and when not in google docs
Intent pickImageIntent = new Intent(Intent.ACTION_GET_CONTENT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
pickImageIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
}
pickImageIntent.setType("image/*");
activity.startActivityForResult(pickImageIntent, REQUEST_CODE_CHOOSE_MULTI_IMAGE_FROM_GALLERY);
并将结果 URI 复制到缓存目录中的临时文件中并返回路径
String extension = getImageExtension(context, uri);
inputStream = context.getContentResolver().openInputStream(uri);
file = File.createTempFile("image_picker", extension, context.getCacheDir());
file.deleteOnExit();
outputStream = new FileOutputStream(file);
if (inputStream != null) {
copy(inputStream, outputStream);
success = true;
}
For Camera库向用户请求相机权限android.permission.CAMERA,并将相机图像保存在应用缓存目录中。
private void handleCaptureImageResult(int resultCode) {
if (resultCode == Activity.RESULT_OK) {
fileUriResolver.getFullImagePath(
pendingCameraMediaUri != null
? pendingCameraMediaUri
: Uri.parse(cache.retrievePendingCameraMediaUriPath()),
new OnPathReadyListener() {
@Override
public void onPathReady(String path) {
handleImageResult(path, true);
}
});
return;
}
// User cancelled taking a picture.
finishWithSuccess(null);
}
此代码与其 github 页面上存在的版本 image_picker: ^0.8.4+4 代码一致 - image picker code