从图库中选择时显示图像,但从相机拍摄时不显示图像

时间:2016-08-09 12:34:56

标签: java android

按下按钮,dispatchTakePictureIntent()可让用户选择拍照或从画廊中选择一张照片四次。这四个URI存储在ArrayList中,四个应该在各自的ImageView中显示。我遇到的问题是,当我拍摄照片时,它不会立即显示在ImageView中;但是我从画廊中选择的照片呢。

我拍摄的照片已正确保存,可以在&#34中找到;从图库中选择"下次我按下按钮。谁能看到我做错了什么?

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);
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

而不是循环4次,为什么不让每个imageView一个OnClickListener来逐个获取图像?

答案 1 :(得分:0)

试试这个,这对我有用

public Uri captureImage() {
    Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (chooserIntent.resolveActivity(getPackageManager()) != null) {
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, "Image File name");
        Uri takenImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        Intent intentPicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intentPicture.putExtra(MediaStore.EXTRA_OUTPUT, takenImageUri);
        startActivityForResult(intentPicture, MyConstants.REQUEST_IMAGE_CAPTURE);
        return takenImageUri;
    }
    return null;
}


public String getRealPathFromURI(Uri contentUri){
    try {
        String[] proj = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    catch (Exception e){
        return contentUri.getPath();
    }
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK && data != null) {
        switch (requestCode){
            case MyConstants.REQUEST_IMAGE_CAPTURE:
                if (takenImageUri != null) {
                    Uri imagePath =getRealPathFromURI(takenImageUri,this));
                }
        }
    }
}