2013-05-17 7 views
1

Используя код, указанный на How to turn on camera flash light programmatically in Android?, я попытался включить фонарик. Устройство, которое я использую для тестирования, - Galaxy SIII. Ниже приведен код в моем java-файле.сбой приложения при включении вспышки

camera = Camera.open(); 
Parameters p = camera.getParameters(); 
p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
camera.setParameters(p); 
camera.startPreview(); 

В файле манифеста были объявлены следующие разрешения.

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

<uses-feature android:name="android.hardware.camera" /> 

Однако, когда я пытаюсь включить фонарик из приложения на моем телефоне, то приложение падает. Я предполагаю, что это может быть связано с тем, что само устройство не поддерживает оставшийся фонарик. LogCat выглядит следующим образом

05-17 07:52:30.489: E/AudioPolicyService(1902): getOutput() tid 17220 ++ 
05-17 07:52:30.489: E/AudioPolicyService(1902): getOutput() tid 17220 -- 
05-17 07:52:30.489: E/AudioPolicyService(1902): getOutput() tid 1902 ++ 
05-17 07:52:30.489: E/AudioPolicyService(1902): getOutput() tid 1902 -- 
05-17 07:52:30.489: E/AudioPolicyService(1902): getOutput() tid 2204 ++ 
05-17 07:52:30.489: E/AudioPolicyService(1902): getOutput() tid 2204 -- 
05-17 07:52:30.504: E/AudioMixer(1902): MOON > checkSEC_PCM ++ 1 
05-17 07:52:30.504: E/AudioMixer(1902): MOON > checkSEC_PCM ++ 1 
05-17 07:52:30.504: E/AudioResampler(1902): Unsupported sample format, 1 bits, 1 channels 
05-17 07:52:30.619: E/AndroidRuntime(4740): FATAL EXCEPTION: main 
05-17 07:52:30.619: E/AndroidRuntime(4740): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.app/com.example.app$Potter}: java.lang.RuntimeException: Fail to connect to camera service 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3182) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3225) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.app.ActivityThread.access$1100(ActivityThread.java:140) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1275) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.os.Looper.loop(Looper.java:137) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.app.ActivityThread.main(ActivityThread.java:4898) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at dalvik.system.NativeStart.main(Native Method) 
05-17 07:52:30.619: E/AndroidRuntime(4740): Caused by: java.lang.RuntimeException: Fail to connect to camera service 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.hardware.Camera.native_setup(Native Method) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.hardware.Camera.<init>(Camera.java:348) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.hardware.Camera.open(Camera.java:325) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at com.example.app.MainActivity$Potter.startActivityWithName(MainActivity.java:100) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at com.example.app.MainActivity$Potter.onActivityResult(MainActivity.java:183) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.app.Activity.dispatchActivityResult(Activity.java:5390) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3178) 
05-17 07:52:30.619: E/AndroidRuntime(4740):  ... 11 more 
05-17 07:52:30.664: E/android.os.Debug(2271): [email protected] > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error 
05-17 07:52:38.849: E/MtpService(2094): In MTPAPP onReceive:android.intent.action.BATTERY_CHANGED 
05-17 07:52:38.849: E/MtpService(2094): battPlugged Type : 2 
05-17 07:52:39.419: E/Launcher(22785): Error finding setting, default accessibility to not found: accessibility_enabled 
05-17 07:52:44.159: E/Watchdog(2271): [email protected] 8677 

Что я должен сделать для того, чтобы сделать эту работу, или как я могу проверить первый, если устройство поддерживает вспышку включения?

ответ

0

Приобретение услуги камеры не работает в вашем случае. Это может быть вызвано многими причинами. Другая служба может использовать камеру и, возможно, ее не выпустили. Там может не быть камеры на устройстве (не в GS3) и т.д.

Посмотреть эти темы на дополнительной информации для диагностики вашей точной задачи:

Failed to connect to camera service

Fail to connect to camera service

Android: Fail to connect to camera service at Camera.open();

Android - Fail to connect to camera

+0

Как только я перезапустил свой телефон, приведенный выше код работал нормально. Возможно ли, чтобы это предотвратило это, то есть, если приложение вот-вот рухнет, я дам пользователю понять, что ему нужно перезагрузить телефон. – Ankush

+0

Вы можете поймать исключение и показать пользователю тост. Просто поставьте свой 'Camera.open()' в блок try/catch. –

Смежные вопросы