当我从图库中选择多个图像时,如何阅读/检索路径或Uri[]
?
我想称之为:
Uri[] originalUri = data.getData();
但实际上我只是得到这个,只获取一个Uri
:
Uri originalUri = data.getData();
答案 0 :(得分:9)
@RIT正如你所说,你想在andorid kitkat中获得多个图像。
我尝试下面的代码,对我来说适用于Xperia M2 4.4.4
用于开始图像选择活动
private void startImageSelection(){
Intent intent = new Intent();
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), PICK_IMAGES);
}
但是用户需要长按
来选择图像现在读取所选图像Uri使用下面代码为onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(requestCode==PICK_IMAGES){
if(resultCode==RESULT_OK){
//data.getParcelableArrayExtra(name);
//If Single image selected then it will fetch from Gallery
if(data.getData()!=null){
Uri mImageUri=data.getData();
}else{
if(data.getClipData()!=null){
ClipData mClipData=data.getClipData();
ArrayList<Uri> mArrayUri=new ArrayList<Uri>();
for(int i=0;i<mClipData.getItemCount();i++){
ClipData.Item item = mClipData.getItemAt(i);
Uri uri = item.getUri();
mArrayUri.add(uri);
}
Log.v("LOG_TAG", "Selected Images"+ mArrayUri.size());
}
}
}
}
super.onActivityResult(requestCode, resultCode, data);
}
答案 1 :(得分:0)
从图库中选择多个图像,您可以使用以下代码
String[] projection = {
MediaStore.Images.Thumbnails._ID,
MediaStore.Images.Thumbnails.IMAGE_ID
};
mCursor = getContentResolver().query(
MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
projection,
null,
null,
MediaStore.Images.Thumbnails.IMAGE_ID + " DESC"
);
columnIndex = mCursor.getColumnIndexOrThrow(projection[0]);
答案 2 :(得分:0)
Cursor cursor = this.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,
null, null);
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
int cols = cursor.getColumnCount();
String columns = null;
for (int j = 0; j < cols; j++) {
columns += cursor.getColumnName(j) + " | ";
}
imagePathUriList.add(cursor.getString(1));
}
答案 3 :(得分:0)
这是我在科特林拍摄的。该调用来自一个片段,应该在几乎没有调整的情况下工作。
//const lives in companion or above class definition
private const val PHOTO_PICKER_REQUEST_CODE = 36
private fun launchPhotoPicker() {
Intent(Intent.ACTION_PICK).apply {
putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
type = "image/*"
}.let {
startActivityForResult(it, PHOTO_PICKER_REQUEST_CODE)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == PHOTO_PICKER_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
val selectedPhotoUris = mutableListOf<Uri>()
data?.data?.let {
selectedPhotoUris.add(it)
}
data?.clipData?.let { clipData ->
for (i in 0 until clipData.itemCount) {
clipData.getItemAt(i).uri.let { uri ->
selectedPhotoUris.add(uri)
}
}
}
//data.data is usually the first item in clipdata
//I prefer to not make assumptions and just squash dupes
//I don't trust like that
val uris = selectedPhotoUris.distinctBy { it.toString() }
handlePhotoUris(uris)
}
}
super.onActivityResult(requestCode, resultCode, data)
}
private fun handlePhotoUris(uris: List<Uri>) {
Log.d("photoPicking", "handle uris size: ${it.size}")
//do stuff here
}