现在的位置: 首页 > 综合 > 正文

邮箱格式验证手机号格式验证,自动读取短信

2018年01月10日 ⁄ 综合 ⁄ 共 3176字 ⁄ 字号 评论关闭

1,邮箱和手机号的格式简单验证

	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就可以知道AB在聊天还是
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中存的东西

【上篇】
【下篇】

抱歉!评论已关闭.