尝试捕获并显示图像到图像视图

时间:2019-05-17 04:24:42

标签: java android

我正在尝试从相机中获取图像并显示在imageview中,但是它无法正常工作,但是如果我从图库中选择它,效果很好

我正在跟踪http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample

中的代码示例

这是该活动的代码:

    btn_Camera = findViewById(R.id.btn_Camera);
    btn_Camera.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      selectImage();
     }
    });

    SamImage = findViewById(R.id.SamImage)

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
     switch (requestCode) {
      case Utility.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE:
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        if (userChooseTask.equals("Take Photo"))
         cameraIntent();
        else if (userChooseTask.equals("Choose from Gallery"))
         galleryIntent();
       } else {
        Toast.makeText(RegisterSample.this, "Access Denied", Toast.LENGTH_LONG).show();
       }
       break;
     }
    }

    private void selectImage() {
     final CharSequence[] items = {
      "Take Photo",
      "Choose from Gallery",
      "Cancel"
     };

     AlertDialog.Builder builder = new AlertDialog.Builder(RegisterSample.this);
     builder.setTitle("Add Photo");
     builder.setItems(items, new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int item) {
       boolean result = Utility.checkPermission(RegisterSample.this);

       if (items[item].equals("Take Photo")) {
        userChooseTask = "Take Photo";
        if (result)
         cameraIntent();
       } else if (items[item].equals("Choose from Gallery")) {
        userChooseTask = "Choose from Gallery";
        if (result)
         galleryIntent();
       } else if (items[item].equals("Cancel")) {
        dialog.dismiss();
       }
      }
     });
     builder.show();
    }

    private void galleryIntent() {
     Intent intent = new Intent();
     intent.setType("image/*");
     intent.setAction(Intent.ACTION_GET_CONTENT); //
     startActivityForResult(Intent.createChooser(intent, "Select File"), SELECT_FILE);
    }

    private void cameraIntent() {
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
     startActivityForResult(intent, REQUEST_CAMERA);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);

     if (resultCode == Activity.RESULT_OK) {
      if (requestCode == SELECT_FILE)
       onSelectFromGalleryResult(requestCode, resultCode, data);
      else if (requestCode == REQUEST_CAMERA)
       onCaptureImageResult(requestCode, resultCode, data);
     }
    }


    private void onCaptureImageResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK && data != null && data.getData() != null) {

      FilePathUri = data.getData();
      Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
      ByteArrayOutputStream bytes = new ByteArrayOutputStream();
      thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
      File destination = new File(Environment.getExternalStorageDirectory(),
       System.currentTimeMillis() + ".jpg");
      FileOutputStream fo;
      try {
       destination.createNewFile();
       fo = new FileOutputStream(destination);
       fo.write(bytes.toByteArray());
       fo.close();
       thumbnail = MediaStore.Images.Media.getBitmap(getContentResolver(), FilePathUri);
      } catch (FileNotFoundException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
      SamImage.setImageBitmap(thumbnail);
     }
    }


    @SuppressWarnings("deprecation")
    protected void onSelectFromGalleryResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);

     if (requestCode == SELECT_FILE && resultCode == RESULT_OK && data != null && data.getData() != null) {

      FilePathUri = data.getData();

      try {
       Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), FilePathUri);
       SamImage.setImageBitmap(bitmap);
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    }

这是我的Uliity课程:

public class Utility
{
public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123;

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static boolean checkPermission(final Context context)
{
    int currentAPIVersion = Build.VERSION.SDK_INT;
    if(currentAPIVersion>= Build.VERSION_CODES.M)
    {
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
        {
            if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE))
            {
                AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
                alertBuilder.setCancelable(true);
                alertBuilder.setTitle("Permission necessary");
                alertBuilder.setMessage("External storage permission is necessary");
                alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener()
                {
                    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
                    public void onClick(DialogInterface dialog, int which)
                    {
                        ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
                    }
                });
                AlertDialog alert = alertBuilder.create();
                alert.show();

            }
            else
            {
                ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
            }
            return false;
        }
        else
        {
            return true;
        }
    }
    else
    {
        return true;
    }
}
}

捕获的图像应显示在图像视图上

0 个答案:

没有答案