在Android中,按下按钮启动相机

5

我想在我们的应用程序中点击一个按钮时打开设备的相机。请帮我解决这个问题。


如果您想在应用程序中使用拍摄的照片,请使用此处提供的代码 教程 - pumpkee
4个回答

18

在 Button 的 onClick 内部:

 Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
 startActivityForResult(intent, 0); 

在您的清单文件中添加相机使用权限。

 <uses-permission android:name="android.permission.CAMERA"></uses-permission>

请查看此处的更多讨论:Android相机意图


@Kartik,使用您的答案,其他相机应用程序也可以选择使用,您能否纠正只有默认系统相机应用程序会打开的问题。 - PiyushMishra
我遇到了错误:“无法通过此连接到相机”,有什么解决办法吗? - Nirav Mehta
你不需要在AndroidManifest.xml中添加android.permission.CAMERA,因为你不使用设备相机,而只运行另一个名为Camera的应用程序来使用相机。 - Maksim Dmitriev

2

使用这个

BtnSelectImage.setOnClickListener(new Button.OnClickListener() 
{ 
    @Override
    public void onClick(View v)
    {
        startCamera();
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT,
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI.getPath());
        startActivityForResult(intent, 1);
    }
});

0
#initialize in main activity 
    path = Environment.getExternalStorageDirectory()
            + "/images/make_machine_example.jpg"; #
    ImageView image=(ImageView)findViewById(R.id.image);
 //--------------------------------------------------||

 public void FromCamera(View) {

    Log.i("camera", "startCameraActivity()");
    File file = new File(path);
    Uri outputFileUri = Uri.fromFile(file);
    Intent intent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
    startActivityForResult(intent, 1);

}

public void FromCard() {
    Intent i = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(i, 2);
}

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 2 && resultCode == RESULT_OK
            && null != data) {

        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        bitmap = BitmapFactory.decodeFile(picturePath);
        image.setImageBitmap(bitmap);

        if (bitmap != null) {
            ImageView rotate = (ImageView) findViewById(R.id.rotate);

        }

    } else {

        Log.i("SonaSys", "resultCode: " + resultCode);
        switch (resultCode) {
        case 0:
            Log.i("SonaSys", "User cancelled");
            break;
        case -1:
            onPhotoTaken();
            break;

        }

    }

}

protected void onPhotoTaken() {
    // Log message
    Log.i("SonaSys", "onPhotoTaken");
    taken = true;
    imgCapFlag = true;
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 4;
    bitmap = BitmapFactory.decodeFile(path, options);
    image.setImageBitmap(bitmap);


}

0

首先,您需要过滤系统应用程序,然后才能检查相机活动。我在这里回答了类似的问题here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接