2012-10-12 3 views
0

오리엔테이션 센서에서 이벤트를 하나만 가져 오려고합니다.센서에서 이벤트 만 가져 오기

내 코드는 다음과 같습니다 스레드에서 그런

@Override 
public void onSensorChanged(SensorEvent event) { 
Log(event); 
unregisterSensor(...); 
} 

모든 1000MS 내가 할 :

registerSensor(); 
Thread.sleep(2000); 

문제는 그 난 (같은 방법의 끝에 후 센서의 등록을 취소하는 경우 그 다음에 다음 번에 (센서를 다시 등록 할 때) 이전에 잡힌 값 이벤트를 기록합니다 (휴대 전화 이동 중). onSensorChanged에 카운터를 사용하여 두 번 실행하는 기능을 제공하면 올바른 값을 감지하고이 값을 두 번 기록합니다.

한 번만 호출되는 메서드의 문제점은 무엇입니까?

답변

1

코드에 따르면 onSensorChanged()myevent을 기록하고 인수로는 event을 기록하지 않습니다.

게다가, LocationManager에게 등록 또는 등록 취소에 대한 모든 번거 로움 대신 1 ~ 2 초마다 새로운 이벤트 만 보내 줄 것을 권한다. LocationManager#requestLocationUpdates() 메서드의 minTime 매개 변수를 사용하여이 작업을 수행 할 수 있습니다.

+0

"myevent"는 내 실수입니다. 코드가 훨씬 길어집니다. 그러나 나는 전화기의 GPS 위치를 얻는 방향을 필요로하지 않는다. 나는 오리엔테이션 센서를 사용하여 전화의 성향을 얻는다. – Hoconosc

+0

API에서 'getOrientation' 메소드 또는 유사점이있어 전화 경사도를 얻습니다 (나중에 살펴볼 것입니다). 찾지 못하면 여기에 게시하십시오. – Ridcully

+0

저는 그것을 사용하고 있습니다. 완벽하게 작동하고 있습니다. 내 문제는 그것이 성층권의 속도로 사건을 전달한다는 것이고 이것은 분명히 배터리를 소모시킬 것입니다. 그래서 "스레드 솔루션"을 사용하고 있습니다. – Hoconosc

0

네트워크 공급자를위한 LocationListener에서 비슷한 동작을 보았 기 때문에 센서를 감지하는 센서에 대해 알지 못했지만 놀랄 일도 아닙니다.

그런데, 나는 당신이 onSensorChanged()을 몇 번 호출하게하고, 첫 번째 (캐싱 됨) 및 평균 (또는 로우 패스 필터 사용)을 다음과 같이 호출하도록 제안합니다. 더 정확한 정확도를 얻게되고 두 개의 이벤트가 배터리를 더 이상 차지하지 않게됩니다 :-)

행운을 빕니다.

+0

문제는 센서를 등록하지 않고 등록한 상태로두면 매 X 초마다 onSensorChanged가 초당 20 회 이상 호출됩니다. 평균은 정확도는 좋지만 배터리는 좋지 않을 수 있습니다. 나는 첫 번째 값을 올바르게 읽고 다른 것들을 건너 뛰려 고 노력했다. (그리고 매 X 초마다 이것을한다.)나는 쓰레드를 실행하는 것이 센서를 등록하고 onSensorChanged를 두 번째로 20 회 이상 시작하는 배터리 절약이라고 생각합니다. – Hoconosc

관련 문제