So it appears that series60 phones never call MIDlet.pauseApp() when an incoming call is received (which might explain why the emulators have no way to simulate an incoming call or a way to have pauseApp called). I've tried on a 6620 and 6682, please let me know if this is not a standard thing for series 60 phones. Of course other midp2 phones and emulators call pauseApp as you would expect, so I think it's just the symbian midp2 impl that's incorrect. But then nokia does not list this as a known issue...i'm stumped as to why?
I see that others use the Canvas.showNotify and hideNotify methods to know when the app is paused, but this is not sufficient. There are many system alerts that come up that result in calls to hideNotify and showNotify, like asking the user for permission to use networking, connectivity, or sms or to ask which access point to use. Therefore using hideNotify and showNotify does not tell you if a call has interrupted the app.
I also tried using Displayable.isShown, but once the call is answered my displayable is put back on the screen, so calls to isShown return true even though the user is still on the phone. This makes it impossible to know if there is currently a call in progress.
Is there some series60 documentation on how midlets are suppose to behave when a call interrups the app? It seems this is an important thing, but since they don't follow the midp spec it's hard to figure out how to handle the situation. My specific problem is doing http posts and an incoming call is answered when you're waiting for the http response. Most of the time the call kills the GPRS connection and so when the call completes the http post just sits and waits and waits and never gets a response. The user has an option to abort and retry, but if I knew that an incoming call had interrupted the http post I could resend without making the user get involved.
thanks for any insight.