在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 Camera 和 Paper 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中拍照的默认相机的主要内容,如果未能解决你的问题,请参考以下文章