私は待っている受信機を持っていますTelephonyManager.ACTION_PHONE_STATE_CHANGED
:
public void onReceive(Context context, Intent intent) {
String theAction = intent.getAction();
if (theAction != null && theAction.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
CONTEXT = context;
startListening();
}
取得したら、リスナーを登録します (方向センサー用)。
public void startListening() {
sensorManager = (SensorManager) CONTEXT.getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0) {
sensor = sensors.get(0);
running = sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}
}
そして、リスナーのonSensorChanged()
メソッドで:
public void onSensorChanged(SensorEvent event) {
if(running) {
sensorManager.unregisterListener(this);
// do some not significant stuff here
}
そして今問題: 電話がかかってきて、受信機が起動し、次にリスナーが起動し、すべてが設計どおりに機能します。しかし、後でバッテリー統計を見ると、私のアプリは 2 ~ 3% の消耗があるアプリとしてリストされています。この割合は、通話がないにもかかわらず増加しています。したがって、受信機は機能していません。
このバッテリーの消耗はどこから来るのですか?レシーバーを開始するアクティビティが機能していません (とにかく単一のチェックボックスです)。私は、リスナーがによって登録解除されない可能性があると思いますsensorManager.unregisterListener(this);
が、うまくいくはずです-最初のイベントを受け取ったときにリスナーを登録解除します。それは理にかなっています。
どうすれば問題を解決できますか?