Диспетчер сенсоров не работает должным образом после обновления Android 2.3.6 - PullRequest
1 голос
/ 01 октября 2011

Пару дней назад я сделал свое первое приложение на Android. Основная концепция заключается в контроле датчика приближения, если на датчике есть препятствие, я увеличу счетчик. Если счетчик пересекает пороговое значение, я инициирую действие.

Я внедрил ПО для мониторинга датчиков в службе, эта служба вызывается из Действия через каждые 10 минут, чтобы пробудить процессор и запустить службу, если она остановлена.

Все было отлично, несколько тысяч загрузок на рынке с хорошими рейтингами. Это было хорошо, пока Android 2.3.3. Недавно мой мобильный телефон был обновлен до Android 2.3.6, и, к сожалению, приложение не работает должным образом.

Слушатель датчика не срабатывает, когда экран выключен. Иногда он работает нормально, в большинстве случаев он не работает. После подачи нескольких входов на датчик, через некоторое время, если я включаю экран, автоматически запускаются сразу все триггеры на сенсоре, и счетчик увеличивает и запускает действие.

Подводя итог, можно сказать, что сенсорный приемник не работает, когда экран выключен (в Android 2.3.6), до Android 2.3.3 он работал нормально. Если я подключаю отладчик, телефон не переходит в спящий режим и все работает нормально, поэтому я не могу найти проблему. Пожалуйста, помогите мне.

Вот мой код.

Вызов службы каждые 10 минут.

Thread trd = new Thread(){
      public void run(){
        int sec = 1000;
        int min = 60 * sec;
        Calendar cal = Calendar.getInstance();
        alarmMngr.setRepeating(AlarmManager.RTC_WAKEUP, 
                               cal.getTimeInMillis(), 
                       10 * min, 
                       PendInt);
      }
    };
    trd.start();

В службе ..

// On sensor change
public void onSensorChanged(SensorEvent event){
    if(event.sensor == SnsrProx){
       if(event.values[0] <= 5){
           IncProxCntr(1);
       }else{
        IncProxCntr(0);
       }

    } 
}


private void IncProxCntr(int x){
 if( x == 1){
     FakeCall_SnsrCnt++;
     vibrate(VIBRATE_SHORT);
 }
 if(FakeCall_SnsrCnt >= Settings.getMaxSnsrCnts(this)){
 Trig_IncominCall();
 }
}

1 Ответ

0 голосов
/ 28 июня 2013

Приобретите wakelock в сервисе также

...