我的意图不是拍照并将其保存到SD卡中,获取链接等。该图像已经由Android中的原始相机应用程序拍摄。
我需要知道如何根据SD卡获取该图像路径,例如
emulated/0/sdcard/DCIM/100ANDRO/image.jpg
我该如何获得最近拍摄的图像的这种格式。
我的意图不是拍照并将其保存到SD卡中,获取链接等。该图像已经由Android中的原始相机应用程序拍摄。
我需要知道如何根据SD卡获取该图像路径,例如
emulated/0/sdcard/DCIM/100ANDRO/image.jpg
我该如何获得最近拍摄的图像的这种格式。
我是这样完成的:
final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID + " DESC";
Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
imageCursor.moveToFirst();
do {
String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
if (fullPath.contains("DCIM")) {
//--last image from camera --
return;
}
}
while (imageCursor.moveToNext());
Uri selectedImageUri = data.getData();
selectedImagePath = getRealPathFromURI(selectedImageUri);
public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
Cursor
提供了一个随机读写访问数据库查询结果集的方法。
getContentResolver()
返回一个ContentResolver
实例,用于你的应用程序包。
当你想要访问内容提供者中的数据时,你需要使用应用程序上下文中的ContentResolver对象作为客户端与提供者进行通信。ContentResolver对象与提供者对象通信,提供者对象是实现ContentProvider类的一个实例。提供者对象接收来自客户端的数据请求,执行所请求的操作,并返回结果。
Content Resolver包含了CRUD(创建、读取、更新、删除)方法,这些方法对应于Content Provider类中的抽象方法(insert、delete、query、update)。Content Resolver不知道它正在交互的Content Providers的实现方式(也不需要知道),每个方法都传递一个URI,指定要与哪个Content Provider进行交互。
MediaStore: 媒体提供者包含内部和外部存储设备上所有可用媒体的元数据。MediaStore.images
包含所有可用图像的元数据。