标签:
前一段时间。由于项目的需要,采用ShareSDK该共享功能。其中包含 短信股吧。和呼叫系统,以分享要与成功处理服务器交互的消息后,(我不在乎在这里,收到。仅仅关心发出去了)。可是ShareSDk并不支持短信分享的回调功能,咨询了技术客服,也没有讨论出解决方式来。于是自己尝试粗略实现了一下。
在调用系统短信发送后,通过内容观察者监听 短信发件箱的改变,假设监听到有内容改变的短信ID,那么获取当前的内容并检測当中是否含有某些关键字( 当然,这个关键字是我们自定义的。比如:“jarlen”);假设找到则说明已发送了(我这里不关心,对方是否能收到)。
/**
* 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;
/**
* 短信息发送监听者构造器
*
* @param context
* @param handler 监听回调
* @param address 监听的目标手机号
* @param content 监听的内容关键字
*/
public SMSContentObserver(Context context, Handler handler, String address, String content) {
super(handler);
this.mContext = context;
this.mHandler = handler;
if (address != null) {
//去掉手机号中的所有空格
this.targetAddress = 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, null,
null);
String address = null;
String smsContent = null;
// 遍历查询结果获取用户正在发送的短信
while (cursor.moveToNext()) {
StringBuffer sb = new StringBuffer();
// 获取短信的发送地址
address = cursor
.getString(cursor.getColumnIndex("address"));
smsContent = cursor
.getString(cursor.getColumnIndex("body"));
}
if (address != null && smsContent != null) {
// 找到一个正在发送的短信
Log.e("===", "找到一个正在发送的短信");
if (targetAddress != null) {
// 事先指定的收件人不为空
if (address.contains(targetAddress)
&& smsContent.contains(observerContent)) {
// 正好是事先指定的收件人,而且信息内容含有某种关键字
Log.e("===", "信息内容含有某种关键字");
Message msg = mHandler.obtainMessage();
msg.obj = address;
msg.what = 1;
msg.sendToTarget();
} else {
Message msg = mHandler.obtainMessage();
msg.what = 0;
msg.sendToTarget();
}
} else {
// 事先没有指定的收件人
if (smsContent.contains(observerContent)) {
// 信息内容含有某种关键字
Log.e("===", "信息内容含有某种关键字");
Message msg = mHandler.obtainMessage();
msg.obj = address;
msg.what = 1;
msg.sendToTarget();
} else {
Message msg = mHandler.obtainMessage();
msg.what = 0;
msg.sendToTarget();
}
}
}
}
}
}
}
/**
* 监听
*/
private SMSContentObserver smsContentObserver;
private boolean smsContentObserverFind = false;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1 && !smsContentObserverFind) {
........// 相关处理
smsContentObserverFind = true;
}
}
};
smsContentObserver = new SMSContentObserver(this, mHandler, usernumber,"某关键词");
getContentResolver().registerContentObserver(
Uri.parse("content://sms"), true, smsContentObserver);
/**
*监听解绑
*/
if (smsContentObserver != null) {
getContentResolver().unregisterContentObserver(smsContentObserver);
smsContentObserver = null;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
基于android 社会的app短信分享 发送回调事件的实现
标签:
原文地址:http://www.cnblogs.com/yxwkf/p/4802937.html