2013-08-23 2 views
4
내가 (의사 여기에 기록 된) 안드로이드의 코드를 다음 한

에있을 때 코드 100 오류로 종료됩니다. 카메라 서버가 중지되었습니다. 카메라가 정상적으로 작동하기 전에 사진을 찍은 경우이상한 안드로이드 카메라 동작은 토치

나는 많은 시간 동안 그것을 디버깅하고 있었고 나는 토치로 라인을 주석 처리 할 때 작동한다는 것을 알았다. 사진을 찍을 때나 작동하지 않을 때 두 경우 모두에서 토치가 작동하는 것을 볼 수 있습니다. 접시 닦는 행주의 코드는 다음입니다

:

if(mCamera != null){ 
    mCamera.stopPreview(); 
    Camera.Parameters p = mCamera.getParameters(); 
    List<String> supported = p.getSupportedFlashModes(); 
    if (supported.contains(Camera.Parameters.FLASH_MODE_TORCH)) { 
     p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
    } 
    mCamera.setParameters(p); 
    mCamera.startPreview(); 
} 

사진 촬영 때문에 토치 작동하지 수있는 어떤 이유가 있습니까? 나는 그것이 Motorola Razr과 Samsung Galaxy SIII에서 일어난다는 것을 관찰했다.

내 장치에이 앱의 두 가지 버전 (다른 이름 등)을 설치했습니다. 그리고 난 다음을 수행하십시오

  1. 다시 시작 장치
  2. 앱으로 토치 시도
  3. 앱으로 토치는 점에서 다시 작동 않는 경우 1.
  4. 시도 앱없이 토치
    1. : 앱으로 토치 시도

    그리고 그 결과는 다음입니다

  5. 앱-없이 토치는 항상 작동
  6. 앱-와 토치 (다시 시작 후) 점 2.
  7. 이 앱으로 토치 점 5. 항상 작동에서 작동하지 않는 시도의 약 80 %에서 (응용 프로그램없이 토치 사용 후)

사진을 찍기 전에 torchOff()를 추가해도 응용 프로그램이 작동하기 시작합니다.

+0

호기심 - 의도적으로 카메라를 실행하는 것이 필요한 사진을 찍을 수있는 방법이 아닌 기술적 인 이유가 있습니까? (잡았다 : 일부 Samsung 장치는 activityOnResult 매개 변수에서 데이터 = null을 전달할 수 있습니다.) –

+0

@HowardPautz 레이아웃을 사용자 정의했으며 사진을 찍을 때 토치가 필요합니다. 사진 찍기는 쉬운 부분입니다. – Ari

답변

2

우리는 이것을 "Monty Python Dead Parrot Log.d answer"라고 부를 수 있습니다 .-P 당신을위한 해결책이 있었으면합니다. Heisenbugs는 잡기가 어렵습니다.

토치에 isOn() 테스트가 있습니까?
비슷하게 (기억하지 못합니다) 카메라에 isReady() 테스트가 있습니까?

mCamera.torchOn() 또는 .torchOff() 이전, 도중 또는 후에 카메라가 죽는지를 로그에서 확인할 수 있습니까?

통화 간 시간 범위를 늘리면 어떻게됩니까? 이것은 실제 앱에는 쓸모가 없지만 어떤 일이 일어나고 있는지 모니터링하고 파악하는 데 도움이 될 수 있습니다. 의사 코드 같은 것을 말 :

try { 
    // Log.d ("cam", "here 1") ; 
    mCamera = configAndInitialize(); 
    // Log.d ("cam", "here 2"); 
    if (mCamera.isReady()) { // or isConfigured/initialized 
     // Log.d ("cam", "here 2"); 
     Camera.startPreview(); 
     // Log.d ("cam", "here 2"); 
     thisThread.setDelay (200); // millisecs. try even up to 2000 ms ! 
     // Log.d ("cam", "here 4"); 
     mCamera.torchOn(); 
     // Log.d ("cam", "here 5"); 
     thisThread.setDelay (200); // again up to 2000 ms 
     // Log.d ("cam", "here 6"); 
    } 
    } catch (Exception e) { 
    Log.d ("oops!", e.toString()); 
    } 

다른 것은 모니터, 또는 확인하기 위해, 카메라와 토치 정말 불 수 onclick을하기 전에 준비가되어 있다는 것입니다. Log.d와 같은 지연을 뿌려보세요. 콜백이 필요할 수도 있습니다 (mCamera.isReady(), onClick 사용).

또 다른 할 일은 카메라의 소스 코드 (또는 토치)와 GREP를 오류 100으로 파 낸다는 것입니다 - 아니면 일반적인 안드로이드 100입니까?

카메라가 작동하면 얼마나 많은 일이 일어나는지 잘 알고있을 것입니다. 수백 건의 전화처럼 보입니다. 이러한 낮은 레벨 항목 중 일부는 비동기식이므로 (캠은 결국 하드웨어 임) NPE 또는 초기화가 불충분 한 개체가 의심됩니다. 모든 NPE 등이 갇히지는 않기 때문에 지연되거나 동기화 된 시퀀스가 ​​사용되는 경우에는 거기에 없을 수도 있습니다.

(HTH는 - 제가 최근에 카메라 물건을 많이해야했다, 당신의 고통, 아리을 느낄 삼성 SIII에 디버깅이 소요 엄청나게 시간입니다..)

[편집] 당신은 아마 이미이 링크를 발견했습니다 하지만 단지의 경우 :

How to turn on camera flash light programmatically in Android?

+0

답변 해 주셔서 감사합니다. 토치 스위치를 켜고 끌 수 있습니다. 나는 토치를 켜고 끌 수있다. 모든 준비가 끝난 후에 나는 몇 분의 미성년자를 기다릴 수 있습니다. (나는 미리보기와 횃불이 켜진 것을 볼 수 있습니다.) 그 점에 모든 것이 잘 작동합니다. 그런 다음 화면을 클릭하고 사진을 찍습니다. 그림으로 콜백을받는 대신 OnError 오류 100 Media Server가 발생했습니다. 그래서 모든 것이 준비되었다고 생각합니다. 안드로이드 나 하드웨어의 버그 일 수 있습니다. – Ari

+0

@Ari u r 환영합니다. 물론 실제 장치를 테스트하는 것이 좋습니다. 그러나 클린 - 슬레이트 에뮬레이터 (1-5 단계를 따르십시오)가있는 동작은 무엇입니까? 또한 검토를 위해 콜백 코드를 OP로 편집하십시오. 위의 설명에서 콜백을 처리하기 전에 충돌이 발생 했습니까? 하드웨어의 버그는 2 개의 서로 다른 공급 업체의 장치를 사용하는 것처럼 보입니다. (면도기와 SIII가 같은 캠과 드라이버 코드를 사용하지 않는 한 :) 안드로이드의 버그는 분명히 들리지 않을 것입니다 : - | ... 아마도 로그 파일 출력도 게시해야합니다. 이건 이상한거야. –

+0

충돌이 발생하지 않습니다. 사진에 콜백 대신에 나는 오류가 발생했습니다. – Ari

1

나는 이것이 안드로이드 카메라 HAL (하드웨어 추상화 계층)의 각 OEM의 이행과 관련된 생각합니다. 이 문제는 나에게도 발생했는데 확실하지는 않지만 대부분의 카메라 HAL의 토치 모드는 비디오 캡처에서만 작동합니다. 어쨌든 가장 많이 사용됩니다. 토치가있는 비디오를 녹화 해보십시오.

가능한 한 가지 해결 방법은 사진을 찍기 직전에 카메라의 플래시 모드를 FLASH_MODE_ON으로 설정 한 다음 다시 필요할 때 사진을 촬영 한 후 FLASH_MODE_TORCH로 돌아가는 것입니다.

+0

사진 품질을 높이기 위해 토치를 사용하고 있으므로 flash_mode_on을 사용하면 나에게 도움이되지 않을 것이라고 생각합니다. 답변 주셔서 감사합니다 - 지금 나는 다른 사람도이 문제가 있음을 알고 있습니다. – Ari

+1

@npace - 아마도이 문제에 대해 아마 맞다고 생각합니다. 예를 들어 삼성 카메라에는 여러 가지 이상한 문제가있었습니다. (CommonsWare, 이걸 읽으면 안돼, 나는 지뢰의 그 분야를 문서화하지 않을거야 :-P ... 나는 다리 나 팔이 없다. 코를 코딩하는 것은 시간이 너무 많이 걸린다. 그것은 ...) –

+0

LG 장치에서 작동하는 카메라 응용 프로그램을 코딩해야합니다. 내 경험상 기본 카메라 HAL에서 가장 멀리 떨어져 있습니다 ... 삼성은 거의 비교 대상입니다. – npace

관련 문제