0
我正在寫一個簡單的應用程序來跟蹤我的手機信號強度較差的時段。我這樣做是使用IntentService
,該監聽PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
如下:在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();
}
}
但是,我看到後收到的第一信號強度變更通知,onDestroy()
被稱爲(據推測,IntentService
電話stopSelf()
)。
此問題不限於PhoneStateListener
。我還有一個簡單的應用程序,它使用了接近傳感器這樣的:
@Override
protected void onHandleIntent(Intent intent){
mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);
}
在這種情況下,也只被告知第一鄰近的變化,在這之後Service
停止本身。
那麼,在Service
中註冊類似聽衆的模式是什麼?
任何投入?我很樂意提供任何其他信息.. – curioustechizen 2011-12-27 05:24:20