メール認証コードの自動取得
5578 ワード
プロジェクトの需要、私はネット上でいくつかの資料を調べて、自動的にメールの検証コードの機能を取得することを実現して、自分で記憶力がよくなくて、このブログを書いて後で調べるためです
1つ目の実装方式は,傍受放送の形式で実現する(この方法は互換性が悪く,一部の携帯電話では自動的に充填できない)
まず、ブロードキャストリスナーを実装します.
権限を追加する必要があります.
リスニングが必要な場所にリスナーを登録するには、次の手順に従います.
第2の実現方式は、メールデータの変化を観察することによって実現される
まず観察者クラスを実現します
権限を追加する必要があります.
自動充填が必要なactivity
1つ目の実装方式は,傍受放送の形式で実現する(この方法は互換性が悪く,一部の携帯電話では自動的に充填できない)
まず、ブロードキャストリスナーを実装します.
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
/**
*
* @author
*/
public class SMSReceiver extends BroadcastReceiver {
private static MessageListener mMessageListener;
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for (Object pdu : pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
//String sender = smsMessage.getDisplayOriginatingAddress();//
String content = smsMessage.getDisplayMessageBody();//
// :"【XXXX】 , :539611( , )"
if( content.indexOf("XXXX") != -1){// XXXX
int index = content.indexOf(" :");
index += 4;
mMessageListener.onReceived( content.substring( index, index+6 ) );
//abortBroadcast();//
}
}
}
}
//
public interface MessageListener {
public void onReceived(String message);
}
public void setOnReceivedMessageListener(MessageListener messageListener) {
this.mMessageListener = messageListener;
}
}
権限を追加する必要があります.
リスニングが必要な場所にリスナーを登録するには、次の手順に従います.
import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText et;
private SMSReceiver mSMSReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.editText1);
//
mSMSReceiver = new SMSReceiver();
//
IntentFilter intentFilter = new IntentFilter(SMSReceiver.SMS_RECEIVED_ACTION);
intentFilter.setPriority(Integer.MAX_VALUE);
//
this.registerReceiver(mSMSReceiver, intentFilter);
mSMSReceiver.setOnReceivedMessageListener(new SMSReceiver.MessageListener() {
@Override
public void onReceived(String message) {
et.setText(message);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//
this.unregisterReceiver(mSMSReceiver);
}
}
第2の実現方式は、メールデータの変化を観察することによって実現される
まず観察者クラスを実現します
public class SmsObserver extends ContentObserver {
Handler handler = null;
public SmsObserver(Context context, Handler handler) {
super(handler);
this.handler = handler;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// , activity
Message message = handler.obtainMessage();
message.arg1 = Contants.SMS_HANDLER_MSG;
handler.sendMessage(message);
}
}
権限を追加する必要があります.
自動充填が必要なactivity
public class MainActivity extends Activity {
EditText et;
/** */
private SmsObserver smsObserver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.editText1);
smsObserver = new SmsObserver(getApplicationContext(),smsHandler);
// SmsObserver
getContentResolver().registerContentObserver(SMS_INBOX, true, smsObserver);
}
private Uri SMS_INBOX = Uri.parse("content://sms/");
/** */
public Handler smsHandler = new Handler() {
public void handleMessage(Message msg) {
//Contants.SMS_HANDLER_MSG
if( msg.arg1 == Contants.SMS_HANDLER_MSG ){
ContentResolver cr = getContentResolver();
String[] projection = new String[] { "body","address","person"};// "_id", "address",
// "person",, "date",// "type
String where = " date > "+ (System.currentTimeMillis() - 10 * 60 * 1000);
Cursor cur = cr.query( SMS_INBOX, projection, where, null, "date desc");
if (null == cur){ return;}
if (cur.moveToNext()) {
String body = cur.getString(cur.getColumnIndex("body"));
if( body.indexOf("XXXX") != -1){// XXXX ,
int index = body.indexOf(" :");
index += 4;
String message = body.substring( index, index+6 );
// ,
Pattern pattern = Pattern.compile("[0-9]{6}");
Matcher matcher = pattern.matcher(message);
if (matcher.find()) {
et.setText(message);//
}
}
}
}
}
};
}