【问题标题】:default camera to take a picture in android在android中拍照的默认相机
【发布时间】:2011-08-22 04:15:45
【问题描述】:

如何在android中使用默认相机拍照?

【问题讨论】:

标签: java android camera png


【解决方案1】:
Uri imageUri;
final int TAKE_PICTURE = 115;

public void capturePhoto(View view) {
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    File photoFile = new File(Environment.getExternalStorageDirectory(),  "Photo.png");
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.fromFile(photoFile));
    imageUri = Uri.fromFile(photoFile);
    startActivityForResult(intent, TAKE_PICTURE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case TAKE_PICTURE:
            if (resultCode == Activity.RESULT_OK) {
                Uri selectedImageUri = imageUri;
                //Do what ever you want
        }
    }
}

【讨论】:

  • 非常感谢,我已经摸索了大约一个小时,试图让相机对象和预览方法正常工作,而这正是我从一开始就想要的。
  • 嗨 Abhan,您的代码将显示所有 3rd 方相机应用程序以及默认相机应用程序。如果有人想只显示默认相机而不显示任何 3rd 方相机应用程序的选择器,如 Line CameraPaper Camera,该怎么办?
  • @NaumanZubair 很难设置。我们有名为SetClassName 的方法,但为此您会知道默认相机应用程序的确切类,但我们都知道我们有不同的OEMs,并且可能会发生他们对默认应用程序使用不同的包。所以这是一种试错方案。
  • 我找到了解决方案,这里是stackoverflow.com/questions/19050810/…
  • @Abhan 我理解你的意思,但是对于特定用户并根据客户的限制要求,它可能对其他开发人员有所帮助。
【解决方案2】:

用于打开相机的intent是

 buttonCapturePhoto.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, CAPTURE_IMAGE);
        }
    });

捕获后为您提供图像的代码是

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Uri uriImage;
    InputStream inputStream = null;
    if ( (requestCode == SELECT_IMAGE || requestCode == CAPTURE_IMAGE) && resultCode == Activity.RESULT_OK) {
        uriImage = data.getData();
        try {
            inputStream = getContentResolver().openInputStream(uriImage);
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options);
            imageView.setImageBitmap(bitmap);
        } catch (NullPointerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        imageView.setAdjustViewBounds(true);
    }
}

【讨论】:

    【解决方案3】:

    这是一个简单的例子。无论如何这会将图像作为一个小位图返回。如果你想检索全尺寸的图像,那就有点复杂了。

    ImageView  takePhotoView = (ImageView) findViewById(R.id.iwTakePicture);
    Bitmap imageBitmap = null;
    takePhotoView.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View v) {
                    // TODO Auto-generated method stub              
                    dispatchTakePictureIntent(0);
                }
            });
    
        private void dispatchTakePictureIntent(int actionCode) {
              Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);     
              startActivityForResult(takePictureIntent, actionCode);      
            }
    
        private void handleSmallCameraPhoto(Intent intent) {
            Bundle extras = intent.getExtras();
            this.imageBitmap = (Bitmap) extras.get("data");
            takePhotoView.setImageBitmap(imageBitmap);
        }
    
       @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
            if(resultCode == RESULT_OK)
                handleSmallCameraPhoto(data);
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多