基于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;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
基于android 社会的app短信分享 发送回调事件的实现的更多相关文章
- Android学习笔记之短信验证码的获取和读取
PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...
- 解决:People下面选择分享可见联系人,选择多个联系人后通过短信分享,短信中只显示一个联系人
问题描述: [操作步骤]:People下导入导出中选择分享可见联系人,选择多个联系人后通过短信分享 [测试结果]:短信中只能显示一个联系人 [预期结果]:可以显示多个联系人 经过代码分析,从compo ...
- android 4.4删除短信
android 4.4之后非默认的短信应用已经没有办法删除短信了.像以前那样用如下方法是不会没法删除短信的(即使在xml中配置了短信的读写权限),同时也不会有报错或其他提示. public void ...
- Android 节日短信送祝福(UI篇:3-选择短信与发送短信的Activity的实现)
一.ChooseMsgActivity的实现 1.布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/ ...
- Android监听系统短信数据库变化-提取短信内容
由于监听系统短信广播受到权限的限制,所以很多手机可能使用这种方式没法监听广播,从而没办法获取到系统短信,所以又重新开辟一条路. Android监听系统短信数据库内容变化使用场景: 1.监听短信数据库的 ...
- supersr--打电话/短信分享/邮件分享
// Created by apple on 15/6/17. // Copyright (c) 2015年 Super All rights reserved. // #import " ...
- iOS 短信分享 邮件分享
本地调用短信分享. #import "shareViewController.h" @interface shareViewController (){ UIAlertView * ...
- android打电话、发短信实现
打电话: Intent intent = newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+"156666666666" ...
- Android下调用收发短信邮件等
Android下调用收发短信邮件等 1,调web浏览器Uri myBlogUri = Uri.parse("http://xxxxx.com");returnIt = new In ...
随机推荐
- Spark技术内幕:Stage划分及提交源代码分析
当触发一个RDD的action后.以count为例,调用关系例如以下: org.apache.spark.rdd.RDD#count org.apache.spark.SparkContext#run ...
- 灰度图像阈值化分割常见方法总结及VC实现
转载地址:http://blog.csdn.net/likezhaobin/article/details/6915755 在图像处理领域,二值图像运算量小,并且能够体现图像的关键特征,因此被广泛使用 ...
- Java调用摄像头截图
使用webcam-capture替换JMF调用摄像头 最近有个需要通过java调用摄像头,并截图的需求,在网上找了下资料,大部分是用一个叫jmf的库,但是jmf已经几百年没有更新,用起来各种问题.后来 ...
- 怎样从host之外连接到docker container
启动docker的时候的指令使用 sudo docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d & 这样就能使dock ...
- css实现背景渐变色效果
webkit内核的浏览器,例如(chrome,safari等) background:-webkit-gradient(linear,0 0,0 100%,from(#000000),to(#ffff ...
- ExtJS与JQuery对照
首先在介绍ExtJS和JQuery,然后进行比较 一个.什么是ExtJS? 1.ExtJS能够用来开发RIA也即富client的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面 ...
- windows phone 三种数据共享的方式(8)
原文:windows phone 三种数据共享的方式(8) 本节实现的内容是数据共享,实现的效果描述:首先是建立两个页面,当页面MainPage通过事件导航到页面SecondPage是,我们需要将Ma ...
- 二叉树3种递归和非递归遍历(Java)
import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...
- 概率dp专辑
求概率 uva11021 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- Android开发之使用Handler封装下载图片工具类(源码分享)
假设每下载一张图片,就得重写一次Http协议,多线程的启动和handler的信息传递就显得太麻烦了,我们直接来封装一个工具类,便于我们以后在开发时随时能够调用. (1)在清单文件加入权限 <us ...