Android短信相关
来源:互联网 发布:sql如何使用 编辑:程序博客网 时间:2024/06/04 19:20
1.读取短信
Uri inboxUri = Uri.parse("content://sms/inbox");Cursor c = MainActivity.this.getContentResolver().query(inboxUri, null, null, null, "date desc");if (c != null) { if(c.moveToFirst()){ while (!c.isLast()) { // 获取手机号 String address = c.getString(c.getColumnIndex("address")); // 获取短信内容 String body = c.getString(c.getColumnIndex(“body")); //对获取到的内容进行处理 //…………………………………. SMS sms = new SMS(address, body); list.add(sms); c.moveToNext();//移到下一行 } } c.close();}
2.自动获取短信验证码
1.新建短信的订阅者
import android.content.Context;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Handler;import android.util.Log;import java.util.regex.Matcher;import java.util.regex.Pattern;public class SMSContentObserver extends ContentObserver { private Context mContext; // 上下文 private Handler mHandler; // 更新UI线程 private String code; // 验证码 public SMSContentObserver(Context context, Handler handler) { super(handler); mContext = context; mHandler = handler; }/** 回调函数, 当所监听的Uri发生改变时,就会回调此方法 * 注意当收到短信的时候会回调两次 ** @param selfChange*此值意义不大 一般情况下该回调值false */ @Override public void onChange(boolean selfChange, Uri uri) { // 第一次回调 不是我们想要的 直接返回 if (uri.toString().equals("content://sms/raw")) { return; } // 第二次回调 查询收件箱里的内容 Uri inboxUri = Uri.parse("content://sms/inbox"); // 按时间顺序排序短信数据库 Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc"); if (c != null) { if (c.moveToFirst()) { // 获取手机号 String address = c.getString(c.getColumnIndex("address")); // 获取短信内容 String body = c.getString(c.getColumnIndex("body")); // 判断手机号是否为目标号码,服务号号码不固定请用正则表达式判断前几位。 if (!address.equals("+8618102380000")) { return; } // 正则表达式截取短信中的6位验证码 Pattern pattern = Pattern.compile("\\d{6}"); Matcher matcher = pattern.matcher(body); // 如果找到通过Handler发送给主线程 if (matcher.find()) { code = matcher.group(0); mHandler.obtainMessage(1, code).sendToTarget(); } } } c.close(); }}
上面表示当受到新的短信的时候,如果短信的号码是指定的那个,就通知handler
2.有了订阅者,那肯定就是要注册。
在Activity中注册。
SMSContentObserver smsContentObserver = new SMSContentObserver(MainActivity.this, handler); MainActivity.this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, smsContentObserver);
注意:
1.要考虑动态权限
阅读全文
0 0
- Android 短信会话相关
- Android短信相关
- Android电话、短信相关
- Android短信系统相关
- Android短信相关
- Android短信的相关知识
- Android 短信相关的权限和支持的短信协议
- Android中短信相关信息的数据库
- Android中短信相关信息的数据库
- Android短信开发相关信息记录
- android短信发送相关代码整理
- Android短信发送相关的恶意行为
- Android开发短信相关的知识
- 短信相关
- 短信相关
- Android短信彩信开发手记(一):数据库相关
- Android短信彩信开发手记(一):数据库相关
- android典型代码系列(二十九)------短信数据库操作相关
- centos nginx上搭建服务器
- Gate 7.2的学习笔记(一)
- 击败Facebook Infer!360火线大起底
- http://blog.csdn.net/lz99770337/article/details/46890239
- 股市操作心得--价值投机
- Android短信相关
- White Paper: Red Hat Crash Utility
- 习题25
- nginx 搭建https服务器
- Python学习笔记(一)——Anaconda安装与配置(windows)
- 如何从业余爱好者自学进阶成专业开发者
- 转:问题解决:The project cannot be built until build path errors are resolved
- FineReport中如何制作树数据集来实现组织树报表
- XML约束