Implementation of callback events for text message sharing and sending Based on the android community app
Summary
Some time ago, because of project requirements, I used the ShareSDK sharing function, including text message sharing, and had to interact with the server after the system message sharing is called successfully (I don't care about it here, whether or not the recipient can receive the message ). However, ShareSDk does not support the callback function of text message sharing. It consulted technical customer service and did not discuss the solution. So I tried to implement it roughly.
Method
After the system sends a text message, The system monitors the changes in the text message sending frequency through the content observer. If the ID of the text message with the changed content is monitored, obtain the current content and check whether it contains certain keywords (of course, this keyword is defined by ourselves, for example, "jarlen "); if it is found, it indicates that the message has been sent (I don't care about it here, can the recipient receive it ).
Core Code
/*** Created by jarlen on 2015/6/4. */public class SMSContentObserver extends ContentObserver {private Context mContext; private boolean isGoing = false; private Handler mHandler; private String targetAddress = null; private String observerContent = null; /*** short message sending listener constructor ** @ param context * @ param handler listener callback * @ param address: The target mobile phone number of the listener * @ param content: the content keyword */public SMSContentObserver (Con Text context, Handler handler, String address, String content) {super (handler); this. mContext = context; this. mHandler = handler; if (address! = Null) {// remove all spaces in the mobile phone number this.tar getAddress = address. replaceAll ("", "");} this. observerContent = content;} Object obj = new Object (); @ Override public void onChange (boolean selfChange) {synchronized (obj) {if (! IsGoing) {isGoing = true; Cursor cursor = mContext. getContentResolver (). query (Uri. parse ("content: // sms/outbox"), null, null); String address = null; String smsContent = null; // retrieve the text message while (cursor. moveToNext () {StringBuffer sb = new StringBuffer (); // obtain the SMS sending address = cursor. getString (cursor. getColumnIndex ("address"); smsContent = cursor. getString (cursor. getColumn Index ("body");} if (address! = Null & smsContent! = Null) {// locate a text message Log. e ("=", "locate a text message being sent"); if (targetAddress! = Null) {// The specified recipient is not empty if (address. contains (targetAddress) & smsContent. contains (observerContent) {// exactly the specified recipient, and the information content contains a keyword Log. e ("=", "information content contains certain keywords"); Message msg = mHandler. obtainMessage (); msg. obj = address; msg. what = 1; msg. sendToTarget ();} else {Message msg = mHandler. obtainMessage (); msg. what = 0; msg. sendToTarget () ;}} else {// No recipient specified in advance if (smsContent. contains (observerContent) {// the information content contains a keyword Log. e ("=", "information content contains certain keywords"); Message msg = mHandler. obtainMessage (); msg. obj = address; msg. what = 1; msg. sendToTarget ();} else {Message msg = mHandler. obtainMessage (); msg. what = 0; msg. sendToTarget ();}}}}}}}
Create a listener
/*** Listener */private SMSContentObserver smsContentObserver; private boolean smsContentObserverFind = false; private Handler mHandler = new Handler () {public void handleMessage (Message msg) {if (msg. what = 1 &&! SmsContentObserverFind) {...... // handle smsContentObserverFind = true ;}}};
SmsContentObserver = new SMSContentObserver (this, mHandler, usernumber, "a keyword"); getContentResolver (). registerContentObserver (Uri. parse ("content: // sms"), true, smsContentObserver );
/*** Unbind a listener */if (smsContentObserver! = Null) {getContentResolver (). unregisterContentObserver (smsContentObserver); smsContentObserver = null ;}