2015-04-17 45 views
1

我创建了一个Android服务,它使用画布在Window.manager上创建一个圆圈,然后触摸该圆圈我想打开/关闭手电筒。开启/关闭Android的服务中的相机闪光灯清单开启/关闭

我能够打开闪光灯列表,但是当我再次触摸关闭应用程序时会崩溃。

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); 

我越来越

了java.lang.RuntimeException:失败在android.hardware.Camera连接到相机服务 (Camera.java:497) 在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.dispatchPointe r事件(View.java:8583) 在android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4091) 在android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:3957) 在android.view。 ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3509) 在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3562) 在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3528) 在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 $ InputSt age.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) 在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3509) 在android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5806) 在android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5745) 在android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5716) 在android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5896) 在android.view.InputEventReceiver.dispatchInput在android.os.MessageQueue.next(MessageQueue.java:143) android.os.Looper.loop(Looper.java)上的事件(InputEventReceiver.java:192) at android.os.MessageQueue.nativePollOnce(Native Method) :122) 在android.app.ActivityThread.main(ActivityThread.java:5312) 在java.lang.reflect.Method.invoke(本机方法) 在java.lang.reflect.Method.invoke(Method.java: 372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:901) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

回答

1

你有没有添加相机的权限我清单?

<uses-permission android:name="android.permission.CAMERA" /> 
+0

是的,我已经添加了<使用许可权的android:NAME = “android.permission.FLASHLIGHT” /> sunnytheshine

2

编辑: 也许尝试检查,如果你的相机对象调用开放之前被初始化。可能在摄像机已打开时拨打Camera.open();导致错误。

if(camera == null){ 
    try { 
     camera = Camera.open(); 
    } catch (Exception e) { 
     Log.e("ERROR", "CameraInstance", e); 
    } 
} 
+0

是的相机对象已经初始化在类声明的开始 – sunnytheshine

1

尝试

static Camera camera = null; 

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);} 

详细检查link!!

+0

我已经试过这个,但它不工作我打电话给这个方法思想服务。 – sunnytheshine

+0

你正在得到什么错误/异常,,,更新logcat中的细节 –