Android自動入力メール認証コード
現在、メール認証コードを使用するappが多すぎるため、メールをブロックし、その中の認証コードをEditTextに直接取り出す必要があります.通常、次の2つのシナリオがあります.
1、カスタムブロッキングを使ってメールの内容をブロックする.この方式は言うまでもない.
2、メールデータベースの変化を監視する.
実際の応用では,第1の不確定要素が多すぎて,第2のスキームを採用するとより信頼できる.
コードは次のとおりです.
次のように使用します.
1、カスタムブロッキングを使ってメールの内容をブロックする.この方式は言うまでもない.
2、メールデータベースの変化を監視する.
実際の応用では,第1の不確定要素が多すぎて,第2のスキームを採用するとより信頼できる.
コードは次のとおりです.
/**
* @ClassName: SmsObserver
* @Description:
* @author God
* @date 2015-6-25 5:28:24
*
*/
public class SmsObserver extends ContentObserver {
public static final String SMS_URI_INBOX = "content://sms/inbox";
private Activity activity = null;
private String smsContent = "";
private SmsListener listener;
public SmsObserver(Activity activity, Handler handler, SmsListener listener) {
super(handler);
this.activity = activity;
this.listener = listener;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Cursor cursor = null;
//
ContentResolver contentResolver = activity.getContentResolver();
cursor = contentResolver.query(Uri.parse(SMS_URI_INBOX), new String[] {
"_id", "address", "body", "read" }, "body like ? and read=?",
new String[] { "% %", "0" }, "date desc");
if (cursor != null) {
cursor.moveToFirst();
if (cursor.moveToFirst()) {
String smsbody = cursor
.getString(cursor.getColumnIndex("body"));
String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(smsbody.toString());
smsContent = m.replaceAll("").trim().toString();
if (!TextUtils.isEmpty(smsContent)) {
listener.onResult(smsContent);
}
}
}
}
/*
*
*/
public interface SmsListener {
/**
* sms
*
* @Title: onResult
*/
void onResult(String smsContent);
}
}
次のように使用します.
SmsObserver smsObserver = new SmsObserver(this, new Handler(),
new SmsListener() {
@Override
public void onResult(String smsContent) {
//todo
}
});
this.getContentResolver().registerContentObserver(
Uri.parse("content://sms/"), true, smsObserver);