以下是一个完整的代码,展示如何在 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 开发中调用手机相机功能,并实现打开相机、保存照片等功能。你可以根据实际需求进行修改和扩展,例如处理照片的压缩、旋转、裁剪等操作,或者将照片保存到指定的文件路径等。

4414

被折叠的 条评论
为什么被折叠?



