Member 12666830 Ответов: 0

Как отобразить либо захваченное изображение, либо выбранное изображение?


При нажатии кнопки "dispatchTakePictureIntent ()" пользователь может выбрать между съемкой или выбором одного из снимков из галереи четыре раза. Эти четыре URI хранятся в ArrayList, и эти четыре должны быть показаны в соответствующих представлениях изображений. Проблема, с которой я сталкиваюсь, заключается в том, что когда я "снимаю картинку", она не сразу отображается в ImageView; но фотографии, которые я выбрал из галереи, это делают.

Снимок, который я сделал, правильно сохранен и может быть найден в разделе "Выбрать из галереи" при следующем нажатии кнопки. Кто-нибудь видит, что я делаю не так?

takePictureIntent():

private void dispatchTakePictureIntent() {
        for(int i = 0; i < 4; i++) {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                // Create the File where the photo should go
                File photoFile = null;
                try {
                    photoFile = createImageFile();
                    outputFileUri = Uri.fromFile(photoFile);
                } catch (IOException ex) {
                    Log.w("error","IOException");
                }catch (NullPointerException nullEx) {
                    Log.w("error","NullPointerException");
                }
                // Camera.
                final List<Intent> cameraIntents = new ArrayList<Intent>();
                final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                final PackageManager packageManager = getPackageManager();
                final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
                for (ResolveInfo res : listCam) {
                    final String packageName = res.activityInfo.packageName;
                    final Intent intent = new Intent(captureIntent);
                    intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
                    intent.setPackage(packageName);
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                    cameraIntents.add(intent);
                }
                // Filesystem.
                final Intent galleryIntent = new Intent();
                galleryIntent.setType("image/*");
                galleryIntent.setAction(Intent.ACTION_OPEN_DOCUMENT);
                // Chooser of filesystem options.
                final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");
                // Add the camera options.
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()]));
                if(id.equals(HAPPY_ID))
                    startActivityForResult(chooserIntent, REQUEST_HAPPY_PHOTO);
                if(id.equals(SURPRISED_ID))
                    startActivityForResult(chooserIntent, REQUEST_SURPRISED_PHOTO);
                if(id.equals(AFRAID_ID))
                    startActivityForResult(chooserIntent, REQUEST_AFRAID_PHOTO);
                if(id.equals(UPSET_ID))
                    startActivityForResult(chooserIntent, REQUEST_UPSET_PHOTO);
                if(id.equals(SAD_ID))
                    startActivityForResult(chooserIntent, REQUEST_SAD_PHOTO);
            }
        }
    }



onActivityResult():
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_HAPPY_PHOTO || requestCode == REQUEST_SURPRISED_PHOTO || requestCode == REQUEST_AFRAID_PHOTO ||
                    requestCode == REQUEST_UPSET_PHOTO || requestCode == REQUEST_SAD_PHOTO) {
                final boolean isCamera;
                if (data == null) {
                    isCamera = true;
                } else {
                    final String action = data.getAction();
                    if (action == null) {
                        isCamera = false;
                    } else {
                        isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    }
                }
                Uri selectedImageUri;
                if (isCamera) {
                    selectedImageUri = outputFileUri;
                } else {
                    selectedImageUri = data == null ? null : data.getData();
                }
                //Log.d("doing ids", "right before id");
                //Log.d("doing ids", "id is " + id);
                if(requestCode == REQUEST_HAPPY_PHOTO) {
                    //Log.d("doing ids", "in happy");
                    happyList.add(selectedImageUri);
                }
                if(requestCode == REQUEST_SURPRISED_PHOTO) {
                    //Log.d("doing ids", "in surprised");
                    surprisedList.add(selectedImageUri);
                }
                if(requestCode == REQUEST_AFRAID_PHOTO) {
                    //Log.d("doing ids", "in surprised");
                    afraidList.add(selectedImageUri);
                }
                if(requestCode == REQUEST_UPSET_PHOTO) {
                    //Log.d("doing ids", "in surprised");
                    upsetList.add(selectedImageUri);
                }
                if(requestCode == REQUEST_SAD_PHOTO) {
                    //Log.d("doing ids", "in surprised");
                    sadList.add(selectedImageUri);
                }
            }
        }
    }


Что я уже пробовал:

Я не понимаю, как URI из галереи успешно используется, но URI из захваченного изображения-нет.

0 Ответов