android api30拍照生成的图片存储到本地手机内存中查看文件被标记为invalid禁止访问如何处理该问题的案例
时间: 2024-03-09 20:47:38 浏览: 52
Android拍照保存在系统相册不显示的问题解决方法
下面是一个处理类似问题的简单案例:
1. 在AndroidManifest.xml文件中添加文件访问权限声明:
```
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
```
2. 在Activity或Fragment中添加以下代码来请求权限:
```
private static final int PERMISSION_REQUEST_CODE = 100;
private String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
// 请求权限
private void requestPermissions() {
ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE);
}
// 检查是否已经授权
private boolean checkPermissions() {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
// 处理请求权限的结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 授权成功,进行相关操作
} else {
// 授权失败,给出提示或者退出应用
}
}
}
```
3. 在拍照完成后,将照片保存到本地存储器:
```
// 创建保存文件的路径
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "photo.jpg");
// 创建保存文件的Uri
Uri uri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", file);
} else {
uri = Uri.fromFile(file);
}
// 创建保存照片的Intent
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
// 启动拍照Activity
startActivityForResult(intent, REQUEST_CODE_CAPTURE_PHOTO);
```
4. 在Activity或Fragment中的onActivityResult方法中处理拍照完成后的操作:
```
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_CAPTURE_PHOTO && resultCode == RESULT_OK) {
// 拍照完成后,将照片保存到本地存储器
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "photo.jpg");
if (file.exists()) {
// 如果文件存在,更新媒体库
MediaScannerConnection.scanFile(this, new String[]{file.getPath()}, null, null);
}
}
}
```
以上是一个简单的处理方案,您可以根据您的具体需求进行修改。
阅读全文