从多媒体资料和照相机获取图像(Android Studio)

从多媒体资料和照相机获取图像(Android Studio),android,android-studio,camera,storage,Android,Android Studio,Camera,Storage,我正在做一个项目,用户可以通过拍照或从Gallery中选择图像来更改他们的个人资料图片。尽管遵循了多个教程,但他们使用的代码对我来说并不适用。每当我在对话框中选择“摄影机”时,它都会转到“库”,然后转到“摄影机”。同样,当我在对话框中选择Gallery时,它确实会转到Gallery,但在图像视图中显示图像之前,它仍会转到Camera。是因为我用的是安卓棒棒糖吗?我也不是很确定 我怎样才能把这个修好 }您正在打开一个intent in for循环,另一个错误是您没有在交换机机箱中断开机箱。在开关箱

我正在做一个项目,用户可以通过拍照或从Gallery中选择图像来更改他们的个人资料图片。尽管遵循了多个教程,但他们使用的代码对我来说并不适用。每当我在对话框中选择“摄影机”时,它都会转到“库”,然后转到“摄影机”。同样,当我在对话框中选择Gallery时,它确实会转到Gallery,但在图像视图中显示图像之前,它仍会转到Camera。是因为我用的是安卓棒棒糖吗?我也不是很确定

我怎样才能把这个修好


}

您正在打开一个intent in for循环,另一个错误是您没有在交换机机箱中断开机箱。在开关箱中使用断路器

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK){
        switch(requestCode){
            case 1:
                Log.i("CameraCode",""+CAMERA_CODE);
                Bundle bundle = data.getExtras();
                Bitmap bmp = (Bitmap) bundle.get("data");
                Bitmap resized = Bitmap.createScaledBitmap(bmp, bmpWidth,bmpHeight, true);
                mImageView.setImageBitmap(resized);
                break;

            case 0:
                Log.i("GalleryCode",""+requestCode);
                Uri ImageURI = data.getData();
                mImageView.setImageURI(ImageURI);
                break;
        }


    }

您在for循环中打开了一个intent,另一个错误是您没有在switch case中破坏case。在开关箱中使用断路器

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK){
        switch(requestCode){
            case 1:
                Log.i("CameraCode",""+CAMERA_CODE);
                Bundle bundle = data.getExtras();
                Bitmap bmp = (Bitmap) bundle.get("data");
                Bitmap resized = Bitmap.createScaledBitmap(bmp, bmpWidth,bmpHeight, true);
                mImageView.setImageBitmap(resized);
                break;

            case 0:
                Log.i("GalleryCode",""+requestCode);
                Uri ImageURI = data.getData();
                mImageView.setImageURI(ImageURI);
                break;
        }


    }

因为您正在使用for循环检查摄影机和Gallary字符串。您需要删除for循环并尝试下面的代码

还有你的开关箱漏了一个缺口

第二种选择


你也可以把休息;用于在条件匹配时中断for循环的关键字,因为您使用for循环检查摄影机和Gallary字符串。您需要删除for循环并尝试下面的代码

还有你的开关箱漏了一个缺口

第二种选择


你也可以把休息;用于在条件匹配时中断for循环的关键字这对我来说很好

public static final int CAMERA_PERMISSION =100;
public static final int REQUEST_IMAGE_CAPTURE =101;
public static final int READ_STORAGE_PERMISSION =102;
public static final int REQUEST_IMAGE_PICK =103 ;
private Dialog mCameraDialog;
private Uri mImageURI;

/**
 * Method to show list dialog to choose photo form gallery or camera.
 */
private void showChoosePhotoDialog() {
    mCameraDialog.setContentView(R.layout.dialog_choose_photo);
    if(mCameraDialog.getWindow()!=null)
        mCameraDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    mCameraDialog.findViewById(R.id.camera).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCameraDialog.dismiss();
            onCameraOptionSelected();
        }
    });
    mCameraDialog.findViewById(R.id.gallery).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCameraDialog.dismiss();
            onGalleryOptionSelected();
        }
    });
    mCameraDialog.show();
}

/**
 * Method to open gallery.
 */
private void onGalleryOptionSelected() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
        Intent intentGallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intentGallery, REQUEST_IMAGE_PICK);
        overridePendingTransition(R.anim.push_left_right, R.anim.push_right_left);
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                READ_STORAGE_PERMISSION);
    }
}

/**
 * Method to open chooser.
 */
private void onCameraOptionSelected() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA},
                        CAMERA_PERMISSION);
            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION);
            }
        } else if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    CAMERA_PERMISSION);

        } else {
            mImageURI = Uri.parse(AppUtils.getFilename());
            startActivityForResult(AppUtils.getCameraChooserIntent(EditProfileActivity.this, mImageURI + ""),
                    REQUEST_IMAGE_CAPTURE);
        }
    } else {
        mImageURI = Uri.parse(AppUtils.getFilename());
        startActivityForResult(AppUtils.getCameraChooserIntent(this, mImageURI + ""),
                REQUEST_IMAGE_CAPTURE);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {
        case CAMERA_PERMISSION:
            int j = 0;
            for (int grantResult : grantResults) {
                if (grantResult != PackageManager.PERMISSION_GRANTED)
                    j = 1;
            }
            if (j == 1) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE) || (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.CAMERA))) {
                    //           Toast.makeText(this, R.string.s_camera_permission, Toast.LENGTH_SHORT).show();
                } else if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE) || !ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.CAMERA)) {
                    // Open phone settings page. 
                    //         Toast.makeText(this, getString(R.string.s_app_needs_camera_permission), Toast.LENGTH_SHORT).show();
                }
            } else
                onCameraOptionSelected();
            break;

        case READ_STORAGE_PERMISSION:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
                onGalleryOptionSelected();
            else if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.READ_EXTERNAL_STORAGE)) {
                //             Toast.makeText(this, getString(R.string.s_storage_permission), Toast.LENGTH_SHORT).show();
            } else if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.READ_EXTERNAL_STORAGE)) {
                 // Open Phone Settings   
            }
    }
}

这对我来说很好

public static final int CAMERA_PERMISSION =100;
public static final int REQUEST_IMAGE_CAPTURE =101;
public static final int READ_STORAGE_PERMISSION =102;
public static final int REQUEST_IMAGE_PICK =103 ;
private Dialog mCameraDialog;
private Uri mImageURI;

/**
 * Method to show list dialog to choose photo form gallery or camera.
 */
private void showChoosePhotoDialog() {
    mCameraDialog.setContentView(R.layout.dialog_choose_photo);
    if(mCameraDialog.getWindow()!=null)
        mCameraDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    mCameraDialog.findViewById(R.id.camera).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCameraDialog.dismiss();
            onCameraOptionSelected();
        }
    });
    mCameraDialog.findViewById(R.id.gallery).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCameraDialog.dismiss();
            onGalleryOptionSelected();
        }
    });
    mCameraDialog.show();
}

/**
 * Method to open gallery.
 */
private void onGalleryOptionSelected() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
        Intent intentGallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intentGallery, REQUEST_IMAGE_PICK);
        overridePendingTransition(R.anim.push_left_right, R.anim.push_right_left);
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                READ_STORAGE_PERMISSION);
    }
}

/**
 * Method to open chooser.
 */
private void onCameraOptionSelected() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA},
                        CAMERA_PERMISSION);
            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION);
            }
        } else if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    CAMERA_PERMISSION);

        } else {
            mImageURI = Uri.parse(AppUtils.getFilename());
            startActivityForResult(AppUtils.getCameraChooserIntent(EditProfileActivity.this, mImageURI + ""),
                    REQUEST_IMAGE_CAPTURE);
        }
    } else {
        mImageURI = Uri.parse(AppUtils.getFilename());
        startActivityForResult(AppUtils.getCameraChooserIntent(this, mImageURI + ""),
                REQUEST_IMAGE_CAPTURE);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {
        case CAMERA_PERMISSION:
            int j = 0;
            for (int grantResult : grantResults) {
                if (grantResult != PackageManager.PERMISSION_GRANTED)
                    j = 1;
            }
            if (j == 1) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE) || (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.CAMERA))) {
                    //           Toast.makeText(this, R.string.s_camera_permission, Toast.LENGTH_SHORT).show();
                } else if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE) || !ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.CAMERA)) {
                    // Open phone settings page. 
                    //         Toast.makeText(this, getString(R.string.s_app_needs_camera_permission), Toast.LENGTH_SHORT).show();
                }
            } else
                onCameraOptionSelected();
            break;

        case READ_STORAGE_PERMISSION:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
                onGalleryOptionSelected();
            else if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.READ_EXTERNAL_STORAGE)) {
                //             Toast.makeText(this, getString(R.string.s_storage_permission), Toast.LENGTH_SHORT).show();
            } else if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.READ_EXTERNAL_STORAGE)) {
                 // Open Phone Settings   
            }
    }
}

请替换您的代码

public void ImageOnClick(View v) {
Log.i("OnClick","True");
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(R.string.AlertTitle);
builder.setItems(Items, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        for(int i=0; i < Items.length; i++){
            if (Items[i].equals("Camera")){
                Intent CameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                if(CameraIntent.resolveActivity(getPackageManager()) != null){
                    startActivityForResult(CameraIntent, CAMERA_CODE);
                }

            }else if (Items[i].equals("Gallery")){
                Log.i("GalleryCode",""+GALLERY_CODE);
                Intent GalleryIntent = null;
                GalleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                GalleryIntent.setType("image/*");
                GalleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(GalleryIntent,GALLERY_CODE);
            }
        }
    }
});
builder.show();
}

请替换您的代码

public void ImageOnClick(View v) {
Log.i("OnClick","True");
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(R.string.AlertTitle);
builder.setItems(Items, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        for(int i=0; i < Items.length; i++){
            if (Items[i].equals("Camera")){
                Intent CameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                if(CameraIntent.resolveActivity(getPackageManager()) != null){
                    startActivityForResult(CameraIntent, CAMERA_CODE);
                }

            }else if (Items[i].equals("Gallery")){
                Log.i("GalleryCode",""+GALLERY_CODE);
                Intent GalleryIntent = null;
                GalleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                GalleryIntent.setType("image/*");
                GalleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(GalleryIntent,GALLERY_CODE);
            }
        }
    }
});
builder.show();
}

您没有使用break语句,这就是它移到下一个语句的原因。 当您触发意图时,只需使用break语句

public void ImageOnClick (View v){
        Log.i("OnClick", "True");
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(R.string.AlertTitle);
        builder.setItems(Items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                for (int i = 0; i < Items.length; i++) {
                    if (Items[i].equals("Camera")) {
                        Intent CameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                        if (CameraIntent.resolveActivity(getPackageManager()) != null) {
                            startActivityForResult(CameraIntent, CAMERA_CODE);
                        }
                        break;

                    } else if (Items[i].equals("Gallery")) {
                        Log.i("GalleryCode", "" + GALLERY_CODE);
                        Intent GalleryIntent = null;
                        GalleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        GalleryIntent.setType("image/*");
                        GalleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(GalleryIntent, GALLERY_CODE);
                    }
                    break;
                }
            }
        });
        builder.show();
    }
另外,在OnActivityResult方法中,请使用break语句,否则将同时使用这两种情况

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        switch (requestCode) {
            case 1:
                Log.i("CameraCode", "" + CAMERA_CODE);
                Bundle bundle = data.getExtras();
                Bitmap bmp = (Bitmap) bundle.get("data");
                Bitmap resized = Bitmap.createScaledBitmap(bmp, bmpWidth, bmpHeight, true);
                mImageView.setImageBitmap(resized);
                break;
            case 0:
                Log.i("GalleryCode", "" + requestCode);
                Uri ImageURI = data.getData();
                mImageView.setImageURI(ImageURI);
                break;
        }


    }
}

您没有使用break语句,这就是它移到下一个语句的原因。 当您触发意图时,只需使用break语句

public void ImageOnClick (View v){
        Log.i("OnClick", "True");
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(R.string.AlertTitle);
        builder.setItems(Items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                for (int i = 0; i < Items.length; i++) {
                    if (Items[i].equals("Camera")) {
                        Intent CameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                        if (CameraIntent.resolveActivity(getPackageManager()) != null) {
                            startActivityForResult(CameraIntent, CAMERA_CODE);
                        }
                        break;

                    } else if (Items[i].equals("Gallery")) {
                        Log.i("GalleryCode", "" + GALLERY_CODE);
                        Intent GalleryIntent = null;
                        GalleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        GalleryIntent.setType("image/*");
                        GalleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(GalleryIntent, GALLERY_CODE);
                    }
                    break;
                }
            }
        });
        builder.show();
    }
另外,在OnActivityResult方法中,请使用break语句,否则将同时使用这两种情况

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        switch (requestCode) {
            case 1:
                Log.i("CameraCode", "" + CAMERA_CODE);
                Bundle bundle = data.getExtras();
                Bitmap bmp = (Bitmap) bundle.get("data");
                Bitmap resized = Bitmap.createScaledBitmap(bmp, bmpWidth, bmpHeight, true);
                mImageView.setImageBitmap(resized);
                break;
            case 0:
                Log.i("GalleryCode", "" + requestCode);
                Uri ImageURI = data.getData();
                mImageView.setImageURI(ImageURI);
                break;
        }


    }
}

非常感谢你。我犯了那些错误,真是太粗心了!非常感谢你。我犯了那些错误,真是太粗心了!