邮箱格式验证手机号格式验证,自动读取短信
2014-09-23 15:31
459 查看
1,邮箱和手机号的格式简单验证
2,获取验证码
3,自动读取短信
权限:<uses-permission android:name="android.permission.READ_SMS"/>
代码中使用:
SmsContent content= new SmsContent(LoginActivity.this, new Handler(), verifyText);
// 注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"),true, content);
最后看下系统短信库的内容:
系统的短信库存在data/data/com.android.providers.telephony/databases/mmssms.db
打开mmssms.db再打开sms表因为所有短信数据都储存在这张表上,下面分析一下这张表的字段。
_id 不用说了吧,标示它的唯一性
thread_id :这个字段很重要,同一个会话中他们的thread_id是一样的,也就是说通过thread_id就可以知道A与B在聊天还是
A与C在聊天
date :这条消息发送或接收的时间
read: 0 表示未读 1表示已读
type : 1表示接收 2
表示发出
body 表示消息的内容
我们在看看thread_id指向的thread表
上图中可以清晰的看到收到消息与回复消息的thread_id都为1
,那么在thread_id这张表中
_id 不用说了吧,标示它的唯一性
date:表示最后接收或者发送消息的时间
message_count:表示发送消息的数量,这里我接收到了一条消息也回复了一条消息那么它的数量就为2
recipient_ids:联系人ID,指向表 canonical_addresses
里的id。
snippet :最后收到或者发送的消息内容,就是上图body中存的东西
private boolean AuthRegisterUser(String UserName) { Pattern patternMailBox = Pattern .compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");// 正则表达的式匹配邮箱 Pattern patternTell = Pattern.compile("^1[0-9]\\d{9}$"); return patternMailBox.matcher(UserName).matches() || patternTell.matcher(UserName).matches(); }
2,获取验证码
btnGetCode=(Button) findViewById(R.id.btngetcode); btnGetCode.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { time=30; btnGetCode.setEnabled(false); runnable.run(); } });
private int time=30; public Runnable runnable=new Runnable() { @Override public void run() { if((time)<=0){ btnGetCode.setText("获取验证码"); btnGetCode.setEnabled(true); }else{ btnGetCode.setText(time+"秒后重试"); btnGetCode.postDelayed(this, 1000); } time--; } };
3,自动读取短信
权限:<uses-permission android:name="android.permission.READ_SMS"/>
代码中使用:
SmsContent content= new SmsContent(LoginActivity.this, new Handler(), verifyText);
// 注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"),true, content);
package 填写自己的包名
import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.widget.EditText; public class SmsContent extends ContentObserver { public static final String SMS_URI_INBOX = "content://sms/inbox"; private Activity activity = null; private String smsContent = ""; private EditText verifyText = null; public SmsContent(Activity activity, Handler handler, EditText verifyText) { super(handler); this.activity = activity; this.verifyText = verifyText; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); ((SMSAUTOreadActivity)activity).test(); Cursor cursor = null;// 光标 // 读取收件箱中指定号码的短信 // cursor = activity.managedQuery(Uri.parse(SMS_URI_INBOX), new String[] { "_id", "address", "body", "read" }, "address=? and read=?", // new String[] { "106900977086", "0" }, "date desc"); /**因为我们获取短信的号码可能有变化,所以我是对短信的内容进行过滤的,我们的有下边4个字母 czmm*/ cursor=activity.getContentResolver().query(Uri.parse(SMS_URI_INBOX), new String[] { "_id", "address", "body", "read" }, "read=? and body like '%czmm%'", new String[] { "0" }, "date desc"); if (cursor != null) {// 如果短信为未读模式 System.out.println("cursor=="+cursor.getCount()); if (cursor.moveToFirst()) { String smsbody = cursor.getString(cursor.getColumnIndex("body")); System.out.println("smsbody=======================" + smsbody); String regEx = "[^0-9]";//匹配不是数字的,注意只是一个字符哦 Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(smsbody.toString()); smsContent = m.replaceAll("").trim().toString(); verifyText.setText(smsContent); } }else{ System.out.println("cursor is null"); } } }
最后看下系统短信库的内容:
系统的短信库存在data/data/com.android.providers.telephony/databases/mmssms.db
打开mmssms.db再打开sms表因为所有短信数据都储存在这张表上,下面分析一下这张表的字段。
_id 不用说了吧,标示它的唯一性
thread_id :这个字段很重要,同一个会话中他们的thread_id是一样的,也就是说通过thread_id就可以知道A与B在聊天还是
A与C在聊天
date :这条消息发送或接收的时间
read: 0 表示未读 1表示已读
type : 1表示接收 2
表示发出
body 表示消息的内容
我们在看看thread_id指向的thread表
上图中可以清晰的看到收到消息与回复消息的thread_id都为1
,那么在thread_id这张表中
_id 不用说了吧,标示它的唯一性
date:表示最后接收或者发送消息的时间
message_count:表示发送消息的数量,这里我接收到了一条消息也回复了一条消息那么它的数量就为2
recipient_ids:联系人ID,指向表 canonical_addresses
里的id。
snippet :最后收到或者发送的消息内容,就是上图body中存的东西
相关文章推荐
- 实现短信验证码自动拦截读取
- Android正则验证手机号,身份证号,邮箱等格式是否正确
- Andorid自动读取短信验证码
- iOS 验证邮箱手机号格式
- 自动读取短信验证码LoaderManager和CursorLoader的使用
- Android自动读取短信验证码
- 读取短信验证码并自动设置给文本框
- Android实现短信验证码自动拦截读取功能
- android 验证手机号和邮箱格式
- Android自动读取短信验证码
- 自动读取验证短信
- 读取短信验证码并自动设置给文本框
- struts2 国际化,防止刷新重复提交表单与邮箱格式验证
- asp.net中验证邮箱格式的正则表达式 去前后空格
- js验证是否为空、数字、邮政编码、联系电话、传真、电子邮箱格式(公用js)
- Javascript 正则验证 Email 邮箱的格式
- 使MVC3自动验证Date格式
- 正则表达式 - java验证IP地址 - java验证日期时间,解决润月 - java验证邮箱格式
- 正则表达式验证邮箱格式
- js验证电子邮箱格式是否正确的代码