您的位置:首页 > 其它

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

2014-09-23 15:31 459 查看
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就可以知道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中存的东西
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: