В моем ImageGridActivty
я разрешаю пользователям загружать одновременно несколько фотографий из памяти телефона.
Для получения URI с каждого изображения, которое я использую ClipData
класса иметод onSelectFromResult(Intent Data)
показывает, как я его реализовал.
@SuppressLint("LongLogTag")
private void onSelectFromResult(Intent data) {
ClipData clipData = data.getClipData();
Log.e( "onSelectFromResult: ", String.valueOf(clipData.getItemCount() + image_count));
if (image_count + clipData.getItemCount() <= 4) {
for (int i = 0; i < clipData.getItemCount(); i++) {
ClipData.Item item = clipData.getItemAt(i);
Uri uri = item.getUri();
image_count++;
Log.e("Image Count:from Select ", "" + uri);
Log.e("Image Count:from select ", "" + image_count);
Uri temp= Uri.parse(compressImage(String.valueOf(uri)));
FileArray.add(new File(String.valueOf(temp)));
String[] filePath = {MediaStore.Images.Media.DATA};
Cursor cursor = getApplicationContext().getContentResolver().query(uri, filePath, null, null, null);
cursor.moveToFirst();
String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0]));
imageURL.add(uri);
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
try {
bitmap = modifyOrientation(bitmap, String.valueOf(new File(getPath(uri))));
} catch (IOException e) {
Log.e("modifyOrientation: ","IOException" );
e.printStackTrace();
}
bitmapimageURL.add(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
gridImageAdapter = new GridImageAdapter(ImageGridActivity.this, bitmapimageURL, new GridImageAdapter.GridImageCallBack() {
@Override
public void delete(int pos) {
image_count--;
Log.e("Image Count onSelectfromResult :on Delete", "" + image_count);
FileArray.remove(pos);
}
});
gridview.setAdapter(gridImageAdapter);
cursor.close();
}
}
Метод переопределения onActivityResult ():
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == FROM_GALLERY)
onSelectFromResult(data);
}
}
Кнопка добавления изображений:
button_add_images.setOnClickListener(new View.OnClickListener() {
private int PICK_IMAGE_REQUEST = 1;
@Override
public void onClick(View v) {
flag_first = true;
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");
i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(i, FROM_GALLERY);
}
});
В строке 3 у нас есть ClipData clipData = data.getClipData();
Я получаю ошибку для getClipData()
, которая гласит:
Call requires API level 16(current min in 15): android.content.Intent#getClipData
Итак, я обнаружил, что она падает, когда ОС Android ниже Android 4.1.2, поэтому есть лидругие альтернативы для ClipData
в этом месте, что имеет почти ту же логику, которую я намеревался сделать?
Заранее спасибо