在Android 10及以上版本中,由于隐私和安全的考虑,访问外部存储的方式发生了变化。在这些版本中,应用程序无法直接访问其他应用程序的私有目录或文件。因此,获取采集图片和图库图片的真实路径需要通过不同的方法来实现。
MediaStore
类。以下是获取采集图片的真实路径的步骤:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
MediaStore
类获取图片的真实路径:// 在Activity中调用以下代码
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = createImageFile();
Uri photoUri = FileProvider.getUriForFile(this, "com.example.fileprovider", photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
// 创建图片文件
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName, ".jpg", storageDir);
currentPhotoPath = image.getAbsolutePath();
return image;
}
// 处理拍摄照片的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
// 在currentPhotoPath中获取图片的真实路径
// ...
}
}
MediaStore
类。以下是获取图库图片的真实路径的步骤:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
MediaStore
类获取图片的真实路径:// 在Activity中调用以下代码
Intent pickImageIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickImageIntent, REQUEST_PICK_IMAGE);
// 处理选择图片的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_PICK_IMAGE && resultCode == RESULT_OK) {
Uri imageUri = data.getData();
// 在imageUri中获取图片的真实路径
// ...
}
}
需要注意的是,获取到的图片真实路径可能是一个content://
类型的URI,而不是传统的文件路径。如果需要使用文件路径,可以通过以下方法将content://
类型的URI转换为文件路径:
public String getRealPathFromUri(Uri uri) {
String filePath = "";
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
filePath = cursor.getString(column_index);
}
cursor.close();
}
return filePath;
}
综上所述,以上是在Android 10及以上版本中获取采集图片和图库图片的真实路径的方法。请注意,由于不提及具体的云计算品牌商,无法提供腾讯云相关产品和产品介绍链接地址。
领取专属 10元无门槛券
手把手带您无忧上云