1

数日前、私は Android で最初のアプリを作成しました。基本的な概念は、近接センサーを監視することです。センサーに障害物がある場合は、カウンターをインクリメントします。カウンターがしきい値を超えると、アクションがトリガーされます。

サービスにセンサー監視SWを実装しました。このサービスは、10分ごとにアクティビティから呼び出され、CPUを目覚めさせ、サービスが停止している場合はサービスを開始します。

すべてが完璧で、市場で数千回のダウンロードを獲得し、高い評価を得ました. これは 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();
 }
}
4

1 に答える 1

0

サービスでもウェイクロックを取得する

于 2013-06-28T14:46:11.510 に答える