Android监听短信到来并自动填充到输入框中

基本原理:通过ContentObserver观察者监听sms数据库的改变,当有变化时检测是否是来自指定号码的短信,如果是的话就通过正则表达式获得需要的内容,然后贴代码 (*^__^*) 嘻嘻……:

 1 /**
 2  *
 3 * @ClassName: SmsContent
 4 * @Description: 短信监听类
 5 * @author guoyizhe
 6 * @email [email protected]
 7 * @date 2015-6-9 下午3:30:12
 8 *
 9  */
10 public class SmsContent extends ContentObserver {
11
12     public static final String SMS_URI_INBOX = "content://sms/inbox";
13     private Activity activity = null;
14     private String smsContent = "";
15     private EditText verifyText = null;
16     private Handler handler;
17     private int SMS_CONTENT = 1;
18
19     public SmsContent(Activity activity, Handler handler, EditText verifyText) {
20         super(handler);
21         this.activity = activity;
22         this.verifyText = verifyText;
23         this.handler = handler;
24     }
25
26     @Override
27     public void onChange(boolean selfChange) {
28         super.onChange(selfChange);
29         Cursor cursor = null;
30         // 读取收件箱中指定号码的未读短信,一般只监听自己公司使用的短信通道号码,如果有多个,查询语句改为 address in (xxx,xxx)就可以了
31         cursor = activity.getContentResolver().query(Uri.parse(SMS_URI_INBOX), new String[] { "_id", "address", "body", "read" }, "address =? and read=?",
32                 new String[] { "5554" ,"0" }, "date desc");
33         if (cursor != null) {//有未读短信
34             cursor.moveToFirst();
35             if (cursor.moveToFirst()) {//这里也是针对一条,多条的话使用while循环遍历出即可
36                 String smsbody = cursor.getString(cursor.getColumnIndex("body"));
37                 String regEx = "[^0-9]";
38                 Pattern p = Pattern.compile(regEx);
39                 Matcher m = p.matcher(smsbody.toString());
40                 smsContent = m.replaceAll("").trim().toString();
41                 verifyText.setText(smsContent);
42             }
43             //通过handler可以处理许多其他的事务,这里只是举个栗子
44             handler.obtainMessage(SMS_CONTENT, verifyText.getText().toString()).sendToTarget();
45             cursor.close();
46         }
47     }
48 }

然后是主Activity:

 1 /**
 2  *
 3 * @ClassName: MainActivity
 4 * @Description: 监听到来的短信并自动填充,也可以处理一些事件
 5 * @author guoyizhe
 6 * @email [email protected]
 7 * @date 2015-6-9 下午2:17:56
 8 *
 9  */
10 public class MainActivity extends Activity {
11     private Handler handler = new Handler(){
12         public void handleMessage(android.os.Message msg) {
13             switch(msg.what){
14             case 1://处理短信到来后事件
15                 //TODO
16                 break;
17             }
18         };
19     };
20
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_main);
25         EditText text = (EditText) findViewById(R.id.smsObserver);
26         SmsContent content = new SmsContent(MainActivity.this, handler, text);
27         // 注册短信变化监听
28         this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);
29     }
30 }
时间: 2024-08-09 13:57:43

Android监听短信到来并自动填充到输入框中的相关文章

Android 监听短信2种方式:Broadcast和ContentObserver

1. 基于Broadcast接受短信 1.1 原理 Android收到短信后系统会发送一个android.provider.Telephony.SMS_RECEIVED广播.把它放在Bundle(intent.Extras)中,Bundle可以理解为一个Map,短信采用"pdus"作为键,pdus应该是protocol description units的简写,也就是一组短信.Android不是一接收到短信就立刻发出广播的,他会有一定的延迟,所以就有可能会有多条短信,所以才会用数组来存

Android 监听短信 两种方式

1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"

Android 监听短信(同时监听广播和数据库)

暗扣,强烈谴责这种侵害用户利益的行为... 下面给大家介绍Android暗扣原理.......  Android4.4以下的系统玩游戏就要小心了哈 暗扣方式之一:短信订购,即监听--------拦截------------处理短信. 暗扣方式之二:模拟人为操作(又叫模拟流量),通过后台程序代码模拟人的点击行为,暗自给用户订购业务,由运营商收取你的费用,当然这其中也需要涉及监听/拦截/处理短信.使用这种方式的原理无非是Http处理网页,还涉及接入点切换问题,这里就不详细讲解. 回归正题:有的时候,

android 监听短信并发送到服务器

1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. 2. 应用观察者模式,监听短信数据库,操作短信内容.   实例如下: SystemEventReceiver:收到开机启动OK的广播后,启动BootService服务:收到应用发送短信的INTENT后,调用系统接口发送短信 BootService:开启服务后,打开短信监听器 SMSObserver:数据观察者,监听短信数据库 SMSHandler:短信处理器

Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)

一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听手机短信. 一.获取短信全部内容 1.新建一个SMSBroadcastReceiver: package com.example.messagecut; import java.text.SimpleDateFormat; import java.util.Date; import android.

Android实战简易教程-第三十六枪(监听短信)

一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听手机短信. 一.获取短信全部内容 1.新建一个SMSBroadcastReceiver: <code class="hljs java has-numbering"><span class="hljs-keyword">package</s

(七)android开发中两种方式监听短信的原理和实现

一.监听短信的两种方式的简介 Android程序开发中,有两种方式监听短信内容:一.接收系统的短信广播:二.应用观察者模式,监听短信数据库. 第一种方式接收系统的短信广播: A.这种方式只对新收到的短消息有效,运行代码,并不会读取收件箱中已读或未读的消息,只有当收到新来的短消息时,才会执行onReceive()方法. B.并且这个广播是有序广播,如果当别的程序先读取到了这个广播,然后拦截掉了个这个广播,你将接收不到.当然我们可以通过设置priority的数值,其实有时是不管用的,现在在一些定制的

android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人

要使用一个ContentProvider,必须要知道的是它所能匹配的Uri及其数据存储的表的结构. 首先想办法找到访问短信及联系人数据的ContentProvider能接受的Uri: 到github上找对应ContentProvider的源码:https://github.com/android 有好多个,哪一个才是短信数据的ContentProvider呢? 在filters输入框:输入telephony. 现在只有一个了,打开: 装有git的话,可以选择clone到本地,没有的话,就选择下载

通过broadcastreceiver 监听短信问题

在mainfest中 订阅   短信到来的广播时候  发现找不到 <action android:name="android.provider.Telephony.SMS_RECEIVED"> 目前未找到原因, 不知道,采用通过代码订阅广播方式 会不会成功 目前尚未验证 在网上人的回答 链接:https://www.zhihu.com/question/28521646/answer/64531805来源:知乎 1   因为这个广播很容易被不法分子拿来使用. google公