AndroidはContentObserver方式で自動認証コードを取得します。
4143 ワード
Android自動取得認証コードの2つの方法は、それぞれBroadcastReceiverとContentObserverであり、両方とも登録、登録をキャンセルする必要があります。
権限を追加したことを覚えてください。ここでContentObserver方式を紹介します。
先にContentObserverコードに行きます。
//ログアウト内容監聴者
this.get ContentResolover().unregister Contront Observer(readSmsContront);
登録をキャンセルする
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
権限を追加したことを覚えてください。ここでContentObserver方式を紹介します。
先にContentObserverコードに行きます。
/**
* Created by weifeiyang on 2016/7/29 0029.
*/
import android.app.Activity;
import android.content.SharedPreferences;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.text.TextUtils;
import android.widget.EditText;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* ,
* Created by cool on 2016/1/4.
*/
public class ReadSmsContent extends ContentObserver {
private Cursor cursor = null;
private Activity mActivity;
private EditText mEditText;
public ReadSmsContent(Handler handler, Activity activity, EditText editText) {
super(handler);
this.mActivity = activity;
this.mEditText = editText;
}
@Override
public void onChange(boolean selfChange, Uri uri) {
/*
onChange(),
onChange
*/
if (uri.toString().equals("content://sms/raw")) {
return;
}
/*
address :
body :
read :
date :
*/
cursor = mActivity.getContentResolver().query(Uri.parse("content://sms/inbox"),
new String[]{"_id", "address", "body", "read"}, null, null, "_id desc");//
//
// mActivity.managedQuery(Uri.parse("content://sms/inbox"),
// new String[]{"_id", "address", "body", "read"}, "address=? and read=?", new String[]{"10086", "0"}, "_id desc");
if (null != cursor && cursor.getCount() > 0) {
cursor.moveToNext();//
int smsbodyColumn = cursor.getColumnIndex("body");//body
String smsBody = cursor.getString(smsbodyColumn);//
String verifyCode = getDynamicPassword(smsBody);
if (TextUtils.isEmpty(verifyCode)) {
return;
}
if (mEditText == null) {
throw new RuntimeException(" EditText ");
}
if (verifyCode.contains(" "))) {
mEditText.setText(verifyCode);
//EditText ,3
mEditText.setFocusable(true);
mEditText.setFocusableInTouchMode(true);
mEditText.requestFocus();
mEditText.setSelection(verifyCode.length());//
}
}
if (!cursor.isClosed()) {
cursor.close();
}
}
/**
* 4
*
*
* @param str
* @return 4
*/
public static String getDynamicPassword(String str) {
Pattern continuousNumberPattern = Pattern.compile("[0-9\\.]+");
Matcher m = continuousNumberPattern.matcher(str);
String dynamicPassword = "";
while (m.find()) {
if (m.group().length() == 4) {
dynamicPassword = m.group();
}
}
return dynamicPassword;
}
}
観察者があれば利用できます。activityやfragmentのオンクレットメソッドでinitSmSContentObserver()を呼び出して登録して、オンデマンド()で通過します。//ログアウト内容監聴者
this.get ContentResolover().unregister Contront Observer(readSmsContront);
登録をキャンセルする
/**
*
*/
private void initSmSContentObserver() {
readSmsContent = new ReadSmsContent(new Handler(), this, seCodeEditText);
//
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, readSmsContent);
}
上記の2つの方法でメールを取得した後、現在はショートメッセージのプラットフォームのソースコードが固定されていないため、検証コードを使って検証しています。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。