安卓开发调用摄像头预览在界面上并获取实时数据出错
代码都没有报错也不知道是哪里出现了问题,运行时就会闪退

这是oncreate函数

opencamera函数

创建会话预览的函数
安卓开发调用摄像头预览在界面上并获取实时数据出错
代码都没有报错也不知道是哪里出现了问题,运行时就会闪退



关注引自免费微信小程序:皆我百晓生
根据您提供的代码片段,看起来您的应用在尝试初始化相机预览功能时遇到了问题。这里有几个可能的问题点,我会逐一检查并提供相应的修复建议。
首先,在onCreate()方法中,确保您已经请求了所需的权限。在Android 6.0(API级别23)及以上版本中,您需要在运行时请求用户授权访问相机权限。这是您在代码中注释掉的部分,您可以将其添加到应用程序中:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
MY_CAMERA_PERMISSION_REQUEST_CODE);
}
接下来,在onRequestPermissionsResult()方法中处理用户的权限决定:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == MY_CAMERA_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted, continue with camera operations
openCamera();
} else {
Toast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show();
}
}
}
然后,我们检查createCameraPreviewSession()方法中的错误处理。当捕获请求构建失败时,您应该更新UI或者记录错误信息。为了简化,可以将异常打印到日志中:
try {
// ...
} catch (CameraAccessException e) {
Log.e("CameraApp", "Error creating capture request", e);
} catch (NullPointerException e) {
Log.e("CameraApp", "Null pointer exception while configuring preview", e);
}
最后,为了更容易调试,确保在onSurfaceTextureAvailable()方法中添加一些日志输出,以便了解何时触发这个回调:
@Override
public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surface, int width, int height) {
Log.d("CameraApp", "Surface texture available");
openCamera();
}
将这些更改应用到您的代码后,重新编译并运行应用程序。如果仍然出现问题,您可以通过查看Logcat(Android Studio工具窗口的一部分)中的日志输出来进一步诊断问题。
如果您在调试过程中遇到困难,可以分享更详细的错误日志,这样我可以更好地协助您解决问题。