1

I created an android service which creates a circle on Window.manager using canvas, and on touching that circle I want to turn the flashlight on/off.

I am able to turn the flashlist on but app crashes when I touch again to turn it off.

public void torch(int val){
    try {
        camera = Camera.open();
    } catch (Exception e) {
        Log.e("ERROR", "CameraInstance", e);
    }
    if(val == 1) {
        if (camera != null) {
            parameters = camera.getParameters();
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(parameters);
            camera.startPreview();
        }
    }
    else
    {
        if (camera != null){
            parameters = camera.getParameters();
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(parameters);
            camera.stopPreview();
        }
    }
}
}
else if(evtouchpossitiondownX >= XH && evtouchpossitiondownX < (XH + WH)
                                                  && evtouchpossitiondownY >= YH && evtouchpossitiondownY < (YH + HH)) {
                                              //Homescreen
                                             /* Intent startMain = new Intent(Intent.ACTION_MAIN);
                                              startMain.addCategory(Intent.CATEGORY_HOME);
                                              startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                              startActivity(startMain);*/
                                              process.torch(1);

                                              windowManager.removeView(control_cirlce);
                                              windowManager.addView(floatingFaceBubble, myParams);

I am getting

java.lang.RuntimeException: Fail to connect to camera service at android.hardware.Camera.(Camera.java:497) at android.hardware.Camera.open(Camera.java:357) at com.amlpl.laziapp.Bubdub.processor.torch(processor.java:123) at com.amlpl.laziapp.Bubdub.laziservice$3.onTouch(laziservice.java:255) at android.view.View.dispatchTouchEvent(View.java:8387) at android.view.View.dispatchPointerEvent(View.java:8583) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4091) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3957) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3509) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3562) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3528) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3638) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3536) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3695) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3509) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3562) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3528) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3536) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3509) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5806) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5745) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5716) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5896) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:192) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:143) at android.os.Looper.loop(Looper.java:122) at android.app.ActivityThread.main(ActivityThread.java:5312) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

sunnytheshine
  • 149
  • 11

3 Answers3

2

Edit: Maybe try checking if your camera object has been initialized before calling open. Maybe calling Camera.open(); when the camera is already open is causing the error.

if(camera == null){
    try {
        camera = Camera.open();
    } catch (Exception e) {
        Log.e("ERROR", "CameraInstance", e);
    }
}
Dan12-16
  • 351
  • 1
  • 8
1

Have you added the camera permission in the manifest?

<uses-permission android:name="android.permission.CAMERA" />
Numan1617
  • 1,158
  • 5
  • 19
1

Try

 static Camera camera = null;

and

try{ 
       if(clickOn == true) {
       clickOn = false;
       camera = Camera.open();
       Parameters parameters = camera.getParameters();
       parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(parameters);
       camera.startPreview();

   remoteViews.setViewVisibility(R.id.button1, View.GONE);
   remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
   localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   } else {
   clickOn = true;
   camera.stopPreview();
   camera.release();
   camera = null;

   remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
   remoteViews.setViewVisibility(R.id.button2, View.GONE);
   localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   }    
   }catch(Exception e) {
   Log.e("Error", ""+e);}

For more check link!!

Community
  • 1
  • 1
Subhalaxmi
  • 5,687
  • 3
  • 26
  • 42