2011-11-03 3 views
3

사용자가 휴대 전화를 귀에 가까이 대면 내 UI를 비활성화 할 수 있습니까?사용자가 휴대 전화를 귀에 가까이 대면 내 활동에서 UI가 비활성화됩니까?

http://developer.android.com/reference/android/hardware/Sensor.html

http://developer.android.com/reference/android/hardware/SensorManager.html

하지만 어떻게 해제 할 수 있습니다 UI (사용자의 얼굴 원 같은 : 근접을 테스트 할 수있는 센서가있을 때

내가 거기에 알고 다시 전화를 얻을 수있는 API입니다 실수로 UI를 터치하는 것처럼) 휴대 전화가 사용자의 얼굴에서 멀리 떨어져있을 때 다시 사용 가능하게 설정합니까?

감사합니다.

답변

0

AOSP의 PhoneAppInCallScreen 소스 코드에서 원하는 작업 방법을 확인할 수 있습니다. 여기에 주요 포인트는 그것을 지원하는 장치에

  • 에서, AOSP 코드가 필요합니다 (PhoneApp.updateProximitySensorMode() 방법 참조) 터치 스크린을 해제 숨겨진 PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK을 사용합니다.
  • 다른 장치에서는 "터치 잠금"오버레이 (터치 이벤트를 사용하는 전체 화면을 덮는보기 표시/숨기기)를 사용하는 방법이 있습니다. InCallScreen 소스 (대부분 mTouchLockOverlay을 다루는 코드)의 initTouchLock(), enableTouchLock()onTouch() 방법을 참조하십시오.

모든 장치에서 작동하므로 오버레이 방식을 사용하는 것이 좋습니다.

UI 계층에 따라 오버레이를 사용하는 것이 구현하기가 더 쉽고 시각적 피드백을 매우 쉽게 추가 할 수 있기 때문에 일반 UI의 터치 및 가시성 상태를 전환하는 것과 비교하면 더 좋을 수 있습니다 (디밍/애니메이션일까요?) 오버레이가 표시됩니다.

+0

링크가 깨졌습니다 – Mayank

+0

진저 브레드 릴리스 지점 (답변이 게시 된 시점의 현재 버전)을 가리켜 깨진 링크를 수정했습니다. – Joe

0

나는 내 머리 위로 떨어져있는 몇 가지 방법을 생각할 수 있습니다 : 당신이 당신의 UI의 모든 요소에

view.setClickable(false); 

를 호출 할 수

. 확실하지는 않지만 최상위 수준의 상위 레이아웃에서 호출 할 수 있으며 작동 할 수도 있습니다.

당신은 그들을하지 클릭하게됩니다 UI의 모든 요소를 ​​숨길

yourParentLayout.setVisibility(View.INVISIBLE); 

에 보이지 않게 레이아웃을 설정할 수 있습니다.

아마도 그 중 하나가 내가 생각할 가장 최선의 방법 일 것입니다. 화면을 끄고 켜기 위해 사용할 수있는 비공개 API가 있습니다.이 API를 사용하여 프로그래밍 방식으로 화면 끄기/켜기를 검색 할 수 있습니다.

전화 통화를 처리하는 응용 프로그램의 소스 코드를 찾고 시간을 갖고 싶다면 비슷한 방법을 사용할 수 있도록 찾고있는 동작이 있습니다 (이 소스를 보지 못했지만 비공개 API를 사용하여 화면을 종료하고 켤 수 있습니다.)

전화가 사라진 후에도보기를 복원하는 한 근접 센서가 더 이상 가까이있는 물체를 감지하지 않는지 확인하는 onSensorChanged() 메소드에 체크를 추가해야합니다. 그렇지 않으면 위의 방법을 사용하여 조회를 취소 할 수 없게 만드는 것을 취소하십시오.

관련 문제