android - 从图库和相机获取图像 (Android Studio)

标签 android android-studio camera storage

我正在做一个项目,用户可以通过拍照或从图库中选择图像来更改他们的个人资料照片。尽管遵循了多个教程,但他们使用的代码对我不起作用。每当我在 Dialog Box 中选择 Camera 时,它都会转到 Gallery,然后是 Camera。同样,当我在对话框中选择图库时,它确实会转到图库,但在 Image View 上显示图像之前,它仍会转到 Camera。是因为我使用的是 Android Lollipop 吗?我也不确定。

我怎样才能解决这个问题?

package com.example.user.imagestuff;    
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
     String[] Items;
     ImageView mImageView;
     Button mButton;
     final int bmpHeight = 160;
     final int bmpWidth = 160;
     static final int CAMERA_CODE = 1;
     static final int GALLERY_CODE = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mImageView = (ImageView) findViewById(R.id.mImageView);
    mButton = (Button) findViewById(R.id.mButton);
    Items = getResources().getStringArray(R.array.DialogItems);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ImageOnClick(v);
        }
    });
}

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

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


    }
}

最佳答案

因为您正在使用 for 循环来检查 Camera 和 Gallary Strings。 您需要删除 for 循环 并尝试使用下面的代码

而且你在你的 swith 案例中还遗漏了 break

final CharSequence[] items = {"Camera", "Gallery"}


                if (items[item].equals("Camera")){
                    Intent CameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    if(CameraIntent.resolveActivity(getPackageManager()) != null){
                        startActivityForResult(CameraIntent, CAMERA_CODE);
                    }

                }else if (items[item].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; 关键字来在您的条件匹配时中断您的 for 循环

关于android - 从图库和相机获取图像 (Android Studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49870325/

相关文章:

用于打开相机和扫描二维码的Android API?

android - 有 Intent 地启动摄像机

安卓系统应用信息

android - 您的项目路径包含非 ASCII 字符 android studio

android - 使用谷歌播放服务我可以在离线模式下获取最新位置(FusedLocationProvider Api)

Android - 模拟器 : I/O warning : failed to load external entity

Android ACTION_IMAGE_CAPTURE Intent

java - 如何获取明天的日期时间,即以毫秒为单位的一天结束时间

android - 在多行中并排显示博客样式标签 (Android)

android - 如何从 Widget/本地服务调用 Android 远程服务 (IPC)?