在android中拍照的默认相机

Posted

技术标签:

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

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

【问题讨论】:

Android camera intent. 的可能重复项 【参考方案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,并且可能会发生他们对默认应用程序使用不同的包。所以这是一种试错方案。 我找到了解决方案,这里是***.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);
   

【讨论】:

以上是关于在android中拍照的默认相机的主要内容,如果未能解决你的问题,请参考以下文章

Android 调用系统相机拍照后 添加文字水印

Android 默认相机崩溃

Android中相机拍照

Android相机:拍照后获取图片Uri

如何使用相机在 Android 上的后台服务中拍照? [复制]

Android:如何在不拍照的情况下从相机捕获文本?