阅读量:1
以下是一个使用CameraUtils类的Java示例:
import android.Manifest; import android.content.pm.PackageManager; import android.hardware.Camera; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.WindowManager; import android.widget.Button; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.io.IOException; public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback { private Camera mCamera; private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取SurfaceView mSurfaceView = findViewById(R.id.surface_view); mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); // 获取Button mButton = findViewById(R.id.button); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { takePicture(); } }); } @Override protected void onResume() { super.onResume(); // 申请相机权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1); } } private void takePicture() { if (mCamera != null) { // 设置自动对焦 Camera.Parameters parameters = mCamera.getParameters(); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); mCamera.setParameters(parameters); // 拍照 mCamera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 保存照片 // ... // 重新预览 try { mCamera.startPreview(); } catch (Exception e) { e.printStackTrace(); } } }); } } @Override public void surfaceCreated(SurfaceHolder holder) { // 打开相机 try { mCamera = CameraUtils.open(); mCamera.setPreviewDisplay(mSurfaceHolder); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 设置预览尺寸 Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(width, height); mCamera.setParameters(parameters); // 开始预览 mCamera.startPreview(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 关闭相机 mCamera.stopPreview(); mCamera.release(); mCamera = null; } }
以上代码中,首先在 onCreate
方法中获取 SurfaceView 和 Button 的实例,然后在 onResume
方法中申请相机权限。
在 surfaceCreated
方法中打开相机,并将预览显示设置为 SurfaceView。在 surfaceChanged
方法中设置预览尺寸,并开始预览。
在按钮的点击事件中调用 takePicture
方法拍照,拍照完成后保存照片,并重新开始预览。
在 surfaceDestroyed
方法中关闭相机。
请注意,以上代码只是一个简单的示例,实际使用中可能需要更多的错误处理和逻辑。