2011-05-03 3 views
6

작동하지 않는 것 :

내가 클래스를 도입하여 가지고 있던 특정 문제를 해결할 수 있었다 -scope static counter 그리고 x 개의 이벤트를 무시합니다. 그러나 나는 아직도 내가 잘못하고있는 것을 알고 싶다. 4 개의 주어진 상수 중 하나를 사용하는 대신 마이크로 초 단위로 힌트를 등록한다."사용자 정의"센서 이벤트 요금은 SensorManager.registerListener (SensorEventListener 수신기, 센서 센서, INT 속도) 업데이트


내 앱의 활동으로 센서의 방향을 결정하고 롤을 결정한 다음 활용합니다.

내 센서를 등록

SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int rate)

을 사용하고 있습니다. 발 Android Documentation for this method:

파라미터

[...]

레이트 센서 이벤트에 전달

레이트. 이것은 시스템에 대한 힌트 일뿐입니다. 이벤트가 지정된 속도보다 빠르거나 느릴 수 있습니다. 보통 이벤트는 더 빨리 수신됩니다. 값은 SENSOR_DELAY_NORMAL, SENSOR_DELAY_UI, SENSOR_DELAY_GAME 또는 SENSOR_DELAY_FASTEST 중 하나이거나 이벤트 간 원하는 지연 시간 (마이크로 초)이어야합니다.

4 개의 미리 정의 된 상수 중 하나를 사용하면 앱이 정상적으로 작동합니다. 그러나이 상수는 모두 내 요구에 너무 빠른 속도 힌트를 제공합니다. 모든 이벤트가 변경 될 때마다 약간의 정보가 포함 된 UDP 패킷을 보내야하며 수신되는쪽에 미리 정의 된 요율을 사용하는 메시지가 쇄도하고있는 것 같습니다. API가 마이크로 초 단위의 양을 지정하므로 30000과 같은 정수를 사용하면 앱에서 센서 이벤트를 모두보고하는 것을 중지합니다.

내 이벤트 속도 힌트를 사용하지 못하게하는 것은 무엇입니까?

+0

네, 저도 그렇게하고 싶습니다! 내가 생각할 수있는 유일한 해결책은 수동으로 패킷을 필터링하는 것입니다. – David

+2

센서 드라이버는 사용자의 힌트에 따라야하는 의무가 없으므로 이는 직접적인 경험에 기반한 쓸데없는 목표입니다. 실제로 미리 정의 된 상수의 일부 또는 전부에 대해 동일한 비율로 이벤트를 보낼 수 있습니다! 가장 좋은 방법은 원하는 시간 - 델타에 도달 할 때 누적되고 트리거하는 것입니다. –

답변

0

저는 센서 리스너 속도가 예상 한대로했는지 확신합니다. 귀하의 질문에 당신은 30 밀리 초인 30000을 썼습니다. 의사는 속도가 힌트보다 빠르다고 말합니다. 그래서 당신은 30ms보다 빠르게하고 있습니다. 다른 네트워크 관련 루틴이 너무 빠르게 진행되고있을 가능성이 있습니까? 센서 차단이 중단되었다고 생각하는 일부 차단이 발생할 수 있습니다.

내 응용 프로그램에서 너무 너무 주어진 주어진 비율을 찾습니다. 그래서 나는 250000으로 속도를 설정했다. 나는 또한 5로 숫자를 부드럽게하기 위해 이동 평균 계산을 사용했다. 나는 아이폰 나침반에 가까운 결과적인 행동을 발견했다.

그럼에도 불구하고 센서 리스너에서 네트워크보고를 제안하는 것은 아닙니다. 이런 식으로하지 않아도됩니다. 그러나 리스너에서 간단한 계산을 수행하고 값을 기록 할 수 있습니다. 그런 다음 숫자가 큰 Handler.postDelayed과 같은 타이머를 사용하여 다른 사람들과의 네트워크 전송을 처리합니다.

+0

나는 그 프로젝트 (내가 5 월 말에 떠난 직업 이었음)를 보았을 때부터 너무 오랜 시간이 걸렸지 만, 그 당시 나는 다른 가치의 톤을 시도 했었다는 것을 기억한다. ~ 600ms의 영역은 여전히 ​​결과가 없었습니다. 또한 데이터 그램에 정보를 입력하고 전송하기 전에 장치 측에서 이벤트를 확인 중이므로 네트워크와 관련이 없어야합니다. 리스너에서 네트워크보고가 수행되지 않았습니다. 데이터가 압축되어 네트워킹을 처리하는 AsyncTask로 보냈습니다. –

+0

@DougStephen이 (가) 나를 downvoting하는 이유가 무엇입니까? 내 대답의 어떤 부분이 잘못 되었습니까? –

+1

나는 투표하지 않았다. 아마 다른 누군가가 그랬을 것입니다. –

0

이 질문은 2011 년에 제기되었지만 그럼에도 불구하고이 질문은 많은 변화가 있었기 때문에 대답했습니다. API 19 (2013+) 이후부터는 등록 API의 새로운 변형이 있습니다.이 API에서는 센서 판독 값을 받기 원하는 간격을 언급 할 수 있습니다. 워드 프로세서 :

부울 registerListener (SensorEventListener 리스너가 센서 센서 INT samplingPeriodUs, INT maxReportLatencyUs) 지정된 샘플링 주파수에서 소정의 센서와 소정의 최대보고 대기하는 SensorEventListener를 등록한다.

이 기능은 registerListener (SensorEventListener, Sensor, int)와 유사하지만 전달하기 전에 이벤트가 하드웨어 FIFO (대기열)에 일시적으로 머무르는 것을 허용합니다. 이벤트는 maxReportLatencyUs 마이크로 초까지 하드웨어 FIFO에 저장 될 수 있습니다. FIFO에있는 이벤트 중 하나를보고해야하면 FIFO 의 모든 이벤트가 순차적으로보고됩니다. 즉, 최대보고 대기 시간이 경과하기 전에 일부 이벤트가 으로보고됩니다.