Android打开摄像头拍照,并显示出来

Android拍照功能实现
本文介绍如何在Android应用中实现拍照功能,包括在AndroidManifest.xml中添加相机和存储权限,通过MediaStore.ACTION_IMAGE_CAPTURE启动相机,并使用onActivityResult处理拍摄的照片。
第一步 在AndroidManifest.xml中加入权限
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在你的Activity中设置按钮事件打开摄像头
                intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                System.out.println("用户点击了拍照按钮"); 

                SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss");
                PhotoFileName =Environment.getExternalStorageDirectory()+File.separator+ format.format(new Date())+"Photo.jpg";

                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(PhotoFileName)));
                //intent = new Intent(this, com.google.zxing.client.android.CaptureActivity.class);
                startActivityForResult(intent, REQUEST_CAMERA_CODE);
重写onActivityResult方法
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (resultCode == RESULT_OK){
            switch (requestCode){
  
                case REQUEST_CAMERA_CODE:
                    System.out.println("Get CAMERA  RESULT ");
                  // String LocalPhoto= Environment.getExternalStorageDirectory()+File.separator+PhotoFileName;
                    Bitmap bitmap = getLoacalBitmap(PhotoFileName);
                    PhotoResult.setImageBitmap(bitmap);
                    break;
                    default:
                        break;
            }
        } 
    }

定义常用变量
    private static final int REQUEST_SCAN_BARCODE_CODE = 1;
    private static final int REQUEST_CAMERA_CODE = 2;
    private static  String PhotoFileName="";

    TextView  QRCodeResult;
    ImageView PhotoResult;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fire_exit_door); 

        QRCodeResult =(TextView)findViewById(R.id.QRCodeResult) ;
        PhotoResult =(ImageView)findViewById(R.id.imageViewPhotoResult);
    }


Android系统中,可借助隐式Intent打开摄像头拍照,之后返回照片。以下是具体实现步骤与示例代码: 首先,创建一个`File`对象,用于存储摄像头拍下的图片。将图片命名为`saveImage.jpg`,存储在手机SD卡的根目录下,可调用`Environment`的`getExternalStorageDirectory()`方法获取手机SD卡的根目录。接着,调用`Uri`的`fromFile()`方法将`File`对象转换成`Uri`对象,该`Uri`对象标识着`saveImage.jpg`这张图片的唯一地址。 然后,构建一个`Intent`对象,把这个`Intent`的`action`指定为`android.media.action.IMAGE_CAPTURE`,再调用`Intent`的`putExtra()`方法指定图片的输出地址,填入刚刚得到的`Uri`对象。最后,调用`startActivityForResult()`来启动活动。由于使用的是隐式`Intent`,系统会找出能够响应这个`Intent`的活动去启动,照相机程序就会被打开,拍下的照片将会输出到`saveImage.jpg`中。 示例代码如下: ```java import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.io.File; public class MainActivity extends AppCompatActivity { private static final int REQUEST_IMAGE_CAPTURE = 1; private Uri imageUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建一个File对象,用于存储拍下的图片 File imageFile = new File(Environment.getExternalStorageDirectory(), "saveImage.jpg"); imageUri = Uri.fromFile(imageFile); // 构建Intent对象 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); // 启动相机活动 if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } else { Toast.makeText(this, "无法打开相机", Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { // 拍照成功,可以通过imageUri访问照片 Toast.makeText(this, "照片已保存到: " + imageUri.getPath(), Toast.LENGTH_SHORT).show(); } } } ``` 需要注意,使用`Android`的`Intent`调用另外一个`activity`时,采用的是异步方式。`startActivityForResult`之后被调用`activity`不会马上返回结果给调用`activity` [^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值