Androidはメール認証コードの自動記入機能を実現
3087 ワード
この例では、Androidによるメール認証コードの自動記入機能について説明します.
実現の構想は簡単です.1、認証コードの入力が必要なActivityコードに傍受メールを登録するブロードキャスト 2、メッセージをブロックし、その中の検証コード を取得する 3、EditText に返信
コードロジックが簡単であることがわかりますが、注意すべき点はいくつかあります.ここで使用するコード登録ブロードキャストは、グローバルブロードキャストの形式を取らない理由は2日間あり、高バージョンのapiでは、グローバルのメール傍受を登録すると失効します.また、業務については、認証コードを入力したActivityでしか使用できません.コード登録の形式を採用し、現在のActivityが破棄されたときにブロードキャスト登録をキャンセルすることで、私たちの予想に合致し、アプリケーションの性能を向上させます.
2つ目の注意すべき問題は優先度の問題です.
ここでは優先度を最大に設定していることがわかります.私たちのアプリケーションができるだけメールを受け取ることを保証します.注意して、私は「できるだけ」を使っています.つまり、メールの自動記入が必ず成功するとは保証できません.ある仲間は、優先度を最高に設定したのではないかと聞くかもしれません.
どうしてまだ保証できないの?
理由は実は簡単で、あなたはメールを傍受する優先度を最大に設定することができて、同じように、他のアプリケーションもメールの傍受の優先度を最大に設定することができます.例えば、あなたの携帯電話には360セキュリティガードがインストールされています.あなたの会社の認証コードを迷惑メールと見なしています.この時、メールのブロックは失効しました.
以上が本文のすべての内容で、みんなの学習に役立つことを望みます.
実現の構想は簡単です.
private SmsReciver smsReciver = new SmsReciver();
/** Action **/
String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED";
/**
* onCreate() ;
*/
private void registSmsReciver() {
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_SMS_RECIVER);
//
filter.setPriority(1000);
registerReceiver(smsReciver, filter);
}
/**
* ,
*/
private class SmsReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Object[] objs = (Object[]) intent.getExtras().get("pdus");
for (Object obj : objs) {
yte[] pdu = (byte[]) obj;
SmsMessage sms = SmsMessage.createFromPdu(pdu);
//
String message = sms.getMessageBody();
Log.d("log", "message " + message);
// ,
String from = sms.getOriginatingAddress();
Log.d("log", "from " + from);
analysisVerify(message);
}
}
}
/**
* , ,
*
* @param message
*/
private void analysisVerify(String message) {
char[] msgs = message.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < msgs.length; i++) {
if ('0' <= msgs[i] && msgs[i] <= '9') {
sb.append(msgs[i]);
}
}
mEtVerifyCode.setText(sb.toString());
}
@Override
protected void onDestroy() {
super.onDestroy();
//
if (smsReciver != null) {
unregisterReceiver(smsReciver);
smsReciver = null;
}
}
コードロジックが簡単であることがわかりますが、注意すべき点はいくつかあります.ここで使用するコード登録ブロードキャストは、グローバルブロードキャストの形式を取らない理由は2日間あり、高バージョンのapiでは、グローバルのメール傍受を登録すると失効します.また、業務については、認証コードを入力したActivityでしか使用できません.コード登録の形式を採用し、現在のActivityが破棄されたときにブロードキャスト登録をキャンセルすることで、私たちの予想に合致し、アプリケーションの性能を向上させます.
2つ目の注意すべき問題は優先度の問題です.
filter.setPriority(1000);
ここでは優先度を最大に設定していることがわかります.私たちのアプリケーションができるだけメールを受け取ることを保証します.注意して、私は「できるだけ」を使っています.つまり、メールの自動記入が必ず成功するとは保証できません.ある仲間は、優先度を最高に設定したのではないかと聞くかもしれません.
どうしてまだ保証できないの?
理由は実は簡単で、あなたはメールを傍受する優先度を最大に設定することができて、同じように、他のアプリケーションもメールの傍受の優先度を最大に設定することができます.例えば、あなたの携帯電話には360セキュリティガードがインストールされています.あなたの会社の認証コードを迷惑メールと見なしています.この時、メールのブロックは失効しました.
以上が本文のすべての内容で、みんなの学習に役立つことを望みます.