Reputation: 367
E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Fail to connect to camera service at android.hardware.Camera.native_setup(Native Method) at android.hardware.Camera.(Camera.java:423) at android.hardware.Camera.open(Camera.java:384) at ge.baqari.dev.capture.ui.view.CameraView.surfaceChanged(CameraView.kt:39) at android.view.SurfaceView.updateWindow(SurfaceView.java:617) at android.view.SurfaceView.access$000(SurfaceView.java:88) at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:183) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:692) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2123) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) at android.view.Choreographer.doCallbacks(Choreographer.java:579) at android.view.Choreographer.doFrame(Choreographer.java:548) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityThread.java:5341) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) at dalvik.system.NativeStart.main(Native Method)
I found many answers but non of them helped me, I am trying to create custom camera view, implementing surface holder, but it crashes always with Camera.open() method, with parameter and without parameter same, crashes
class CameraView : android.view.SurfaceView, android.view.SurfaceHolder.Callback {
var camera: android.hardware.Camera? = null
var previewing = false
var cameraCallback: CameraCallBack? = null
var pictureCallback: PictureCallback? = null
var cameraParameters: android.hardware.Camera.Parameters? = null
private fun init() {
holder.addCallback(this)
holder.setType(SURFACE_TYPE_NORMAL)
}
constructor(context: android.content.Context, attrs: android.util.AttributeSet) : super(context, attrs) {
init()
}
override fun surfaceCreated(surfaceHolder: android.view.SurfaceHolder) {
}
override fun surfaceChanged(surfaceHolder: android.view.SurfaceHolder, i: Int, i1: Int, i2: Int) {
if (context.packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){
if (previewing) {
camera?.stopPreview()
previewing = false
}
if (camera == null) {
try {
camera = Camera.open(android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK)
cameraParameters!!.setPreviewSize(i1, i2)
camera!!.parameters = cameraParameters!!
camera!!.startPreview()
camera!!.setPreviewDisplay(holder)
previewing = true
} catch (e: java.io.IOException) {
e.printStackTrace()
}
}
}
}
override fun surfaceDestroyed(surfaceHolder: android.view.SurfaceHolder) {
camera!!.stopPreview()
camera!!.release()
previewing = false;
}
}
Upvotes: 0
Views: 2595
Reputation: 809
Problem is in CameraParameters, parameters are null and you try to set null parameters
Fix:
camera = Camera.open(android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK)
cameraParameters = camera!!.parameters
cameraParameters!!.setPreviewSize(i1, i2)
camera!!.parameters = cameraParameters!!
camera!!.startPreview()
camera!!.setPreviewDisplay(holder)
Also you can use this library for camera preview
Upvotes: 0