基于android 社区app短信分享 发送回调事件实现
概要
前段时间,因为项目的需要,使用ShareSDK的分享功能,其中包括 短信分享吗,并且在调用系统短信分享成功后要与服务器进行交互处理(我这里不关心,对方能否收到,只关心发出去了)。但是ShareSDk并不支持短信分享的回调功能,咨询了技术客服,也没有讨论出解决方案来。于是自己尝试粗略实现了一下。
方法
在调用系统短信发送后,通过内容观察者监听 短信发件箱的改变,如果监听到有内容改变的短信ID,那么获取当前的内容并检测其中是否含有某些关键字( 当然,这个关键字是我们自己定义的,例如:“jarlen”);如果找到则说明已发送了(我这里不关心,对方能否收到)。
核心 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;
/**
* 短信息发送监听者构造器
*
* @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;
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。