Альтернативы для класса ClipData для отображения изображений в GridView - PullRequest
0 голосов
/ 02 июня 2018

В моем 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 в этом месте, что имеет почти ту же логику, которую я намеревался сделать?

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...