为什么相机不能每次都启动?

时间:2014-03-11 16:38:29

标签: android

我想在来电时闪烁手电筒。每次这个代码进入服务方法,即它运行良好,它启动服务很好,但问题是它无法每次启动摄像头服务。如果摄像头正在运行,则呼叫状态发生变化时,闪烁不会停止。如果呼叫状态发生变化,我怎么能每次启动摄像头并停止闪烁? 我用的代码......

清单中的

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
        <uses-permission android:name="android.permission.CAMERA"/>
        <uses-permission android:name="android.permission.FLASHLIGHT"/>

在服务中

    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
        try {
            cam = Camera.open();
            p = cam.getParameters();

            String myString = "0101010101010101010101010101010101010101010101011";
            long blinkDelay = 150;
            cam.setParameters(p);

            for (int i = 0; i < myString.length(); i++) {

                     if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){

                break;                  

                }else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
                break;  
                }               

                if (myString.charAt(i) == '0') {
                    p.setFlashMode(Parameters.FLASH_MODE_TORCH);
                    cam.setParameters(p);
                } else {
                    p.setFlashMode(Parameters.FLASH_MODE_OFF);
                    cam.setParameters(p);
                }
                try {
                    Thread.sleep(blinkDelay);
                } catch (Exception e) {
                    Log.d(tag, e.toString());
                    p.setFlashMode(Parameters.FLASH_MODE_OFF);
                    cam.setParameters(p);
                }
            }
        }catch (Exception e) {
            // TODO: handle exception
            Log.d(tag, "in catch1");
            Log.d(tag, e.toString());

    }
}else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
    cam.release();
    stopSelf();
    }else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
        cam.release();
        stopSelf();
    }
}

logcat没有停止,它仍然在运行,疯狂的是我声明我得到的标签

    03-11 23:11:08.129: W/CameraService(133): CameraService::connect X (pid 942) rejected (existing client).
03-11 23:11:08.139: D/crazy(942): in catch1
03-11 23:11:08.139: D/crazy(942): java.lang.RuntimeException: Fail to connect to camera service

1 个答案:

答案 0 :(得分:0)

如果您查看Camera documentation,打开相机可能会抛出RuntimeException的一个原因是另一个进程正在使用相机,这是错误日志似乎表明的内容。检查正在运行的其他进程,并确保没有其他进程正在使用相机(您还应该正确处理此错误)。

您还应确保您的应用程序正在相机上调用release(),这样您就不会阻止其他应用程序使用它。