android开发之调用手机相机功能代码

以下是一个完整的代码,展示如何在 Android 开发中调用手机相机功能,并实现打开相机、保存照片等功能:在布局文件中添加一个按钮,用于触发相机功能,并添加一个 ImageView,用于显示拍摄的照片:

在 AndroidManifest.xml 文件中添加相机权限:

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


activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnCamera"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开相机"
        android:layout_centerInParent="true" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitCenter"
        android:visibility="gone" />

</RelativeLayout>


在 Java 代码中实现相机调用功能,并保存照片:
MainActivity.java:

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CAMERA_PERMISSION = 1;
    private static final int REQUEST_IMAGE_CAPTURE = 2;

    private Button btnCamera;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnCamera = findViewById(R.id.btnCamera);
        imageView = findViewById(R.id.imageView);

        btnCamera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(MainActivity.this,
                            new String[]{Manifest.permission.CAMERA},
                            REQUEST_CAMERA_PERMISSION);
                } else {
                    openCamera();
                }
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CAMERA_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                openCamera();
            }
        }
    }

    private void openCamera() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            if (extras != null) {
                Bitmap imageBitmap = (Bitmap) extras.get("data");
                imageView.setVisibility(View.VISIBLE);
                imageView.setImageBitmap(imageBitmap);

                // 保存照片
                try {
                    MediaStore.Images.Media.insertImage(getContentResolver(), imageBitmap, "Title", "Description");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


在上述代码中,我们在布局文件中添加了一个按钮 btnCamera 和一个 ImageView imageView,用于触发相机功能和显示拍摄的照片。

在 MainActivity 的 onCreate 方法中,我们为按钮 btnCamera 设置点击事件,首先检查相机权限是否已经授予,如果未授予相机权限,则使用 ActivityCompat.requestPermissions 方法申请相机权限。在权限申请的结果回调方法 onRequestPermissionsResult 中,处理用户授予或拒绝相机权限的逻辑。

当用户授予相机权限后,调用 openCamera 方法打开相机。在 openCamera 方法中,我们创建一个 Intent 对象,指定 MediaStore.ACTION_IMAGE_CAPTURE 作为动作,启动相机应用。如果设备上没有相机应用,我们使用 Intent.resolveActivity 方法检查是否有适合的应用来处理该 Intent,以免应用崩溃。然后,调用 startActivityForResult 方法启动相机,并传递一个请求码(REQUEST_IMAGE_CAPTURE)以标识该请求。

当用户完成拍照操作后,会返回到 onActivityResult 方法中。我们可以根据请求码和结果码来判断是否从相机返回的结果,并使用 extras.get("data") 获取照片数据,然后将照片显示在 imageView 中。此外,我们还调用 MediaStore.Images.Media.insertImage 方法将照片保存到设备的图库中,以便在其他应用中访问。

以上代码展示了在 Android 开发中调用手机相机功能,并实现打开相机、保存照片等功能。你可以根据实际需求进行修改和扩展,例如处理照片的压缩、旋转、裁剪等操作,或者将照片保存到指定的文件路径等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值