0

ここに最初の投稿がありますが、stackoverflow は私にとって非常に多くの問題を解決してくれました。これは、しかし、私は理解できないようです。近接検出のたびに TextView の値を 1 ずつ減らす Android アプリを作成しています。何らかの理由で、アクティビティが開始または再開すると (電源ボタン)、2 つの近接ヒットがログに記録されます。電源ボタンを押すときに、検出器に十分に近づいていないことを再確認しました。

コードは次のとおりです。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.exercise);
    //start proximity
    startProximitySensor(sensorListener());
}

private SensorEventListener sensorListener(){
    listener = new SensorEventListener(){

        @Override
        public void onAccuracyChanged(Sensor arg0, int arg1) {
            // TODO Auto-generated method stub

        }


        @Override
        public void onSensorChanged(SensorEvent event) {
            if(event.sensor.getType() == Sensor.TYPE_PROXIMITY){
                String maxRange = String.valueOf(mProximitySensor.getMaximumRange());
                if(event.values[0] == Float.parseFloat(maxRange)){
                    updateTextView();
                    Log.i(TAG,"Proximity Sensor Reading: "+ String.valueOf(event.values[0]));


                }

            }

        }

    };

    return listener;
}

private void startProximitySensor(SensorEventListener proximitySensorEventListener){
    mSensorManager = (SensorManager)getSystemService(getApplicationContext().SENSOR_SERVICE);
    mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    if(mProximitySensor == null){
        Log.i(TAG,"No proximity sensor found!");
    }else{
        proximityStarted = true;
        Log.i(TAG,"Proximity started");
        mSensorManager.registerListener(proximitySensorEventListener,mProximitySensor,SensorManager.SENSOR_DELAY_UI);
    }
}

onResume で timeStamp を作成し、それをセンサーの変更ごとに生成された SystemTime と比較することで、なんとか回避できました。1 秒未満の違いがある場合、TextView は更新されません。これは機能しますが、何か不足しているかどうかを知りたいです。

前もって感謝します

4

0 に答える 0