私の電話の信号強度が弱い期間を記録する簡単なアプリケーションを作成しています。私は、これは次のようにPhoneStateListener.LISTEN_SIGNAL_STRENGTHS
をリッスンIntentService
を使用して行う:IntentService内に登録されたリスナーは、一度だけ通知を受け取ります
public class PoorSignalIntentService extends IntentService {
private TelephonyManager mTelephonyManager;
private PhoneStateListener mPhoneStateListener;
public PoorSignalIntentService() {
super("PoorSignalIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
mPhoneStateListener = new PhoneStateListener(){
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
doSomething(signalStrength);
super.onSignalStrengthsChanged(signalStrength);
}
@Override
public void onServiceStateChanged(ServiceState serviceState) {
doSomething(serviceState);
super.onServiceStateChanged(serviceState);
}
};
mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS|PhoneStateListener.LISTEN_SERVICE_STATE);
}
private void doSomething(SignalStrength signalStrength){
Log.d(TAG, "Signal Strength changed! New strength = "+signalStrength.getGsmSignalStrength());
}
private void doSomething(ServiceState serviceState){
Log.d(TAG, "Service State changed! New state = "+serviceState.getState());
}
@Override
public void onDestroy() {
Log.d(TAG, "Shutting down the IntentService");
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
super.onDestroy();
}
}
しかし、私は、第1の信号強度が受信された通知を変更した後、onDestroy()
は(おそらく、IntentService
コールstopSelf()
)と呼ばれていることがわかります。
この問題はPhoneStateListener
に限定されません。私は、このように近接センサを使用する別のシンプルなアプリがあります:あまりにも、唯一の第1の近接変更がService
自体を停止した後、この場合
@Override
protected void onHandleIntent(Intent intent){
mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);
}
を通知しました。
したがって、Service
にこれらのようなリスナーを登録するパターンは何ですか?
任意の入力?私は追加情報を提供して喜んで.. – curioustechizen