I have defined the following service with an observer of messages sent. The problem is that when sending a message, I sense that is called 3 times onChange method of content
You have kept the Observer for the SMS database through URI. so whenever message is being send the database is updated and 3 of the column of that table is getting updated. so it will notify the observer for each of them. so it is being called for as many times as table data is updated.
What you want to do is check for the _id
of the last item in the content://sms/sent
uri inside onChange. You need to store the previous _id (maybe in a static global variable) and compare it to the _id of the last item (cursor.moveToLast()
)of the cursor after you query for content://sms/sent
. If the _id
is the same, you can choose to ignore the call to onChange. This multiple calls to onChange I believe is due to the sms being moved from folder to folder during sending - outbox, sent items, some other "invisible folder" (which we can't know exactly what, as this particular feature REALLY REALLY needs proper documentation). As you cannot listen to a more specific Uri than content://sms/sent
you'll have to implement this checking for _id everytime you want to detect an sms being sent.
If the previous _id
is different from the one in your static global variable, then you have an sms being sent.