安卓获取图片在本地的真实路径
时间: 2023-06-13 22:06:04 浏览: 133
在Android中,获取本地图片的真实路径可以使用以下代码:
```java
public String getRealPathFromURI(Uri contentUri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(column_index);
cursor.close();
return filePath;
}
```
其中,参数contentUri是图片的URI地址,返回值为图片在本地的真实路径。
相关问题
Android获取图片的真实路径
在Android中,获取图片的真实路径通常发生在用户选择图片后,通过Activity的`ACTION_GET_CONTENT`或者`ACTION_PICK_MEDIA`等意图来选择图片。以下是一般的步骤:
1. **启动相机或相册选择器**:
使用`Intent`启动相机或相册应用程序,让用户选择图片,例如:
```java
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, SELECT_PICTURE_REQUEST_CODE);
```
2. **处理 onActivityResult**:
当用户选择图片后,会回调`onActivityResult`方法,你可以从这里获取图片路径:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_PICTURE_REQUEST_CODE && resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
String imagePath = getPath(selectedImage);
// 这里使用getPath()函数尝试获取图片的文件路径
}
}
private String getPath(Uri uri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} else {
return null;
}
}
```
3. **注意文件权限和生命周期**:
获取到的路径可能是在应用内部存储或者外部存储,确保你的应用具有读取对应位置的权限,并在需要的时候妥善处理文件的关闭和清理,因为某些情况下,如设备重启,这些路径可能会失效。
安卓怎么通过uri获取图片真实路径
在Android中,如果你有一个URI表示图片资源,你可以使用ContentResolver类来获取其对应的本地文件路径。以下是基本步骤:
1. 首先,你需要创建一个Uri对象,它通常来自Intent、数据库或者其他数据源。
```java
Uri imageUri = Uri.parse("content://media/external/images/media/123"); // 这里123替换为实际的图片ID
```
2. 然后创建一个ContentResolver实例,并调用`openInputStream()`方法尝试打开这个Uri,这会返回一个输入流,但不会直接给你文件路径。
```java
ContentResolver resolver = getContentResolver();
InputStream inputStream = resolver.openInputStream(imageUri);
```
3. 为了得到真实的文件路径,你需要读取文件描述符,然后关闭流。接着,你可以使用FileInputStream构造函数从描述符创建一个新的流,并将其传递给FileOutputStream,这样就可以将输入流转换成文件路径了。
```java
FileOutputStream fileOutputStream = new FileOutputStream(fileDescriptor.getFileDescriptor());
// 使用fileOutputStream做进一步操作...
fileOutputStream.close();
inputStream.close();
```
注意,这种方式依赖于系统的文件系统结构,可能会因设备更新或系统设置变化而改变。此外,对于某些安全限制或私有应用的数据,你可能无法获得完整的文件路径。
阅读全文