アプリの加速度センサーに問題があります。それはすべて正常に機能し、値などを読み取ります...しかし、アクティビティを終了した後、センサーは生き続けています! GSamのようなアプリで、自分のアプリがまだ消費していることに気付きました!
登録と登録解除のプロセスを正しく行ったと思いますが、実際には、磁場と方向センサーは適切に登録解除されています。
どうすればそのセンサーを取り除くことができますか? 助けてください!
以下のソースコードを参照してください(登録/登録解除のみを保持):
package com.acceler;
import android.app.Activity;
import android.os.Bundle;
import android.os.Vibrator;
import android.hardware.*;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.util.Log;
import android.view.*;
public class MainActivity extends Activity {
SensorManager sensorManager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display mDisplay = mWindowManager.getDefaultDisplay();
} /* End onCreate activity */
private SensorEventListener sensorEventListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
/* Get the Sensors */
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mGravs, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, mGeoMags, 0, 3);
break;
case Sensor.TYPE_ORIENTATION:
System.arraycopy(event.values, 0, mOldOreintation, 0, 3);
break;
default:
return;
}
if (mprefix == " ***"){
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 50 milliseconds
v.vibrate(50);
//Toast.makeText(getBaseContext(), "Sensor unreliable!", 500).show();
}
}
};
private void stopit(){
sensorManager.unregisterListener(sensorEventListener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
sensorManager.unregisterListener(sensorEventListener,sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD));
sensorManager.unregisterListener(sensorEventListener,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION));
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_UI);
}
protected void onPause() {
super.onPause();
stopit();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
stopit();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
stopit();
}
}