Androidアプリはメール認証コードを取得し、自動的に入力します.
3177 ワード
実現方式の構想:
1、システムにはContentObserverがあり、onChange(boolean selfChange,Uri uri)でメールをフィルタ処理できる.
2、getContentResolver()を呼び出す必要があります.registerContentObserver(uri,true,mObserver)は、登録後にリスニングできます(ContentObserverが有効になります)
実装手順:Activityで現在実装中
1、システムメールurl:Uri uri=Uri.parse("content://sms")
2、ここでContentObserverを継承し、SmsObserverクラスのメールを再処理することができます.
3、内容観察オブジェクトを作成する:SmsObserver mObserver=new SmsObserver(this,mHandler,MSG_RECEIVED_CODE);ここではHnaderを用いて受信検証コードを処理するだけで、EventBusなどを用いて処理メッセージングを行ってもよい
4、getContentResolver()を登録する.registerContentObserver(uri, true, mObserver)
5、opause()またはonDestroy()にgetContentResolver()を逆登録する.unregisterContentObserver(mObserver)
実装されたキーソース:
1、Activity
2、SmsObserver類
参照先:https://blog.csdn.net/qq_31939617/article/details/77430688
1、システムにはContentObserverがあり、onChange(boolean selfChange,Uri uri)でメールをフィルタ処理できる.
2、getContentResolver()を呼び出す必要があります.registerContentObserver(uri,true,mObserver)は、登録後にリスニングできます(ContentObserverが有効になります)
実装手順:Activityで現在実装中
1、システムメールurl:Uri uri=Uri.parse("content://sms")
2、ここでContentObserverを継承し、SmsObserverクラスのメールを再処理することができます.
3、内容観察オブジェクトを作成する:SmsObserver mObserver=new SmsObserver(this,mHandler,MSG_RECEIVED_CODE);ここではHnaderを用いて受信検証コードを処理するだけで、EventBusなどを用いて処理メッセージングを行ってもよい
4、getContentResolver()を登録する.registerContentObserver(uri, true, mObserver)
5、opause()またはonDestroy()にgetContentResolver()を逆登録する.unregisterContentObserver(mObserver)
実装されたキーソース:
1、Activity
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_RECEIVED_CODE) {
String code = (String) msg.obj;
mEtUserVerificationCode.setText(code);
}
}
};
mObserver = new SmsObserver(this, mHandler, MSG_RECEIVED_CODE);
Uri uri = Uri.parse("content://sms");
getContentResolver().registerContentObserver(uri, true, mObserver);
2、SmsObserver類
public class SmsObserver extends ContentObserver {
private Context mContext;
private Handler mHandler;
private int mReceivedCode = 1;
public SmsObserver(Context context, Handler handler, int received_code) {
super(handler);
mContext = context;
mHandler = handler;
mReceivedCode = received_code;
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
String code = "";
if (uri.toString().equals("content://sms/raw")) {
return;
}
Uri inboxUri = Uri.parse("content://sms/inbox");
Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc");
if (c != null) {
if (c.moveToFirst()) {
String address = c.getString(c.getColumnIndex("address"));
String body = c.getString(c.getColumnIndex("body"));
LogUtils.e(" :" + address + "》》》》 :" + body);
Pattern pattern = Pattern.compile("(\\d{4,6})");
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {
code = matcher.group(0);
LogUtils.e(" 》》》" + code);
ClipboardManager cmb = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(code);
mHandler.obtainMessage(mReceivedCode, code).sendToTarget();
}
}
c.close();
}
}
}
参照先:https://blog.csdn.net/qq_31939617/article/details/77430688