Android自動讀取短信驗證碼

實現自動獲取手機的短信驗證碼,原理通過監聽短信數據庫的變化來解析短信,獲取驗證碼。

1.建立一個監聽數據庫的類

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;

/**
 * 監聽短信數據庫,自動獲取短信驗證碼
 * 
 * @author logan
 *
 */
public class AutoGetCode extends ContentObserver {
    private Cursor cursor = null;
    private Activity activity;

    private String smsContent = "";
    private EditText editText = null;

    public AutoGetCode(Activity activity, Handler handler, EditText edittext) {
        super(handler);
        this.activity = activity;
        this.editText = edittext;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        // 讀取收件箱中指定號碼的短信
        cursor = activity.managedQuery(Uri.parse("content://sms/inbox"),
                new String[] { "_id", "address", "read", "body" }, "address=? and read=?",
                new String[] {"你要截獲的電話號碼", "0" }, "_id desc");
        // 按短信id排序,如果按date排序的話,修改手機時間後,讀取的短信就不準了
        if (cursor != null && cursor.getCount() > 0) {
            cursor.moveToFirst();
            if (cursor.moveToFirst()) {
                String smsbody = cursor
                        .getString(cursor.getColumnIndex("body"));
                String regEx = "(?<![0-9])([0-9]{" + 6 + "})(?![0-9])";
                Pattern p = Pattern.compile(regEx);
                Matcher m = p.matcher(smsbody.toString());
                while (m.find()) {
                    smsContent = m.group();
                    editText.setText(smsContent);
                }
            }
        }
    }
}
2.在使用的時候在activity中註冊

AutoGetCode autoGetCode = new AutoGetCode(RegistCode.this, new Handler(),
                regist_code);//regist_code 要顯示驗證碼的EditText
        // 註冊短信變化監聽
        this.getContentResolver().registerContentObserver(
                Uri.parse("content://sms/"), true, autoGetCode);
3.在合適的地方取消註冊

@Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        this.getContentResolver().unregisterContentObserver(autoGetCode);
    }
4.最後別忘記了添加權限
<!-- 讀寫短信的權限 -->
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章