Listener Registered Within An Intentservice Receives Notification Only Once
I am writing a simple app to keep track of the periods when my phone has poor signal strength. I do this using an IntentService, which listens for PhoneStateListener.LISTEN_SIGNAL_
Solution 1:
Ok, I found the solution. My bad. I should be using a Service rather than IntentService, since the latter calls stopSelf() after processing the intents it receives in onHandleIntent().
Here's the working code which extends Service:
publicclassPoorSignalServiceextendsService {
privateTelephonyManager mTelephonyManager;
privatePhoneStateListener mPhoneStateListener;
@Overridepublic IBinder onBind(Intent intent) {
// We don't want to bind; return null.returnnull;
}
@OverridepublicvoidonCreate() {
mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
mPhoneStateListener = newPhoneStateListener(){
@OverridepublicvoidonSignalStrengthsChanged(SignalStrength signalStrength) {
doSomething(signalStrength);
super.onSignalStrengthsChanged(signalStrength);
}
@OverridepublicvoidonServiceStateChanged(ServiceState serviceState) {
doSomething(serviceState);
super.onServiceStateChanged(serviceState);
}
};
super.onCreate();
}
@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {
//Register the listener here.
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS|PhoneStateListener.LISTEN_SERVICE_STATE);
returnsuper.onStartCommand(intent, flags, startId);
}
privatevoiddoSomething(SignalStrength signalStrength){
Log.d(TAG, "Signal Strength changed! New strength = "+signalStrength.getGsmSignalStrength());
}
privatevoiddoSomething(ServiceState serviceState){
Log.d(TAG, "Service State changed! New state = "+serviceState.getState());
}
@OverridepublicvoidonDestroy() {
Log.d(TAG, "Shutting down the Service");
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
super.onDestroy();
}
}
Post a Comment for "Listener Registered Within An Intentservice Receives Notification Only Once"