The Android intent system is great. I want to let the user select an image they have taken so I can do something with it? I want to get contact details of one of the user's contacts? I want to let the user send an email? I don't have to write all that myself. Use an intent. Great!
However I have a complaint. I'm working on a feedback form within the app.
It's nothing fancy, just a handful of text fields basically, which are then
bunged in an email and so all the user has to do is hit "send" in the email
app of their choice. But I don't want
the user to lose the stuff they've entered if they hit home, answer a call, etc.
so I store the text in shared preferences in onPause()
and bring it back in
onResume()
. When the user sends the email I'll delete the text from
the shared preferences so it doesn't hang around. Looks
easy. Use startActivityForResult()
right? Well as it turns out... no.
If the user has more than one app installed, when they hit the send button they
get to choose which one they want to use. If they hit back instead of choosing
an app the result code in onActivityResult()
is 0 which is RESULT_CANCELLED
.
Ok, that looks good. The user didn't get as far as the email app. I'd better
keep their data.
If the user gets as far as the email app and then discards the email instead of
sending it, the result code is also RESULT_CANCELLED
. Fair enough I suppose.
They didn't actually send the email. Still keeping their data in shared prefs.
So what's the result code if the user sends the email? RESULT_CANCELLED
again!
I tried this with GMail which I would expect to be the gold standard. If GMail
doesn't do it then it doesn't really matter if every other email app in the Play
Store does it right; I can't rely on the result code from the most popular email
client on our platform.
sigh
So I've got no way to tell the difference between user didn't even get as far as their email app and user sent the email. So I can't clear the data from the shared preferences. Not great.
So a plea. To anyone who is going to handle an Intent from other apps to
perform some action. Please, please, please make sure you setResult()
with
something useful if
you successfully perform the action. Make life nice for us users of your
Intent.
Darren @ Æ
Comments
comments powered by Disqus