在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://pub.dev/packages/image_picker
上述库不会将图像保存在外部存储中。
注意:使用相机拍摄的图像和视频将保存到您的
应用程序的本地缓存,因此应该只
暂时周围。如果您需要存储您选择的图像
永久,您有责任将其移至更永久的位置
地点。
欲了解更多信息,您可以参考此链接
https://guides.codepath.com/android/Accessing-the-Camera-and-Stored-Media#accessing-stored-media https://guides.codepath.com/android/Accessing-the-Camera-and-Stored-Media#accessing-stored-media
Update :内部如何处理图像拾取image_picker
适用于安卓
对于画廊选择它在内置文件选择器意图中打开,使用ACTION_GET_CONTENT
(关于操作 获取内容 https://developer.android.com/reference/android/content/Intent#ACTION_GET_CONTENT)
使用打开文件时ACTION_GET_CONTENT
- 由于用户参与选择您的应用程序可以访问的文件或目录,因此此机制不需要任何系统权限。您可以阅读更多有关何时需要许可以及何时不在 Google 文档中 https://developer.android.com/training/data-storage/shared/documents-files
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;
}
相机用图书馆请求相机许可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);
}
此代码根据版本image_picker: ^0.8.4+4
代码出现在他们的 github 页面上 -图像选择器代码 https://github.com/flutter/plugins/tree/master/packages/image_picker/image_picker