安卓开发中获取短信验证码并自动填写

1.写一个监听短信数据库的广播:

package com.bjtxwy.efun.activity.logreg;


import android.database.ContentObserver;


import java.util.regex.Matcher;
import java.util.regex.Pattern;


import android.app.Activity;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.widget.EditText;


/**
 * 监听短信数据库,自动获取短信验证码
 * 
 * 
 *
 */
public class AutoGetCode extends ContentObserver {
    private Cursor cursor = null;
    private Activity activity;


    private String smsContent = "";
    private EditText editText = null;


    public AutoGetCode(Activity activity, Handler handler, EditText edittext) {
        super(handler);
        this.activity = activity;
        this.editText = edittext;
    }


    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        // 读取收件箱中指定号码的短信,重要提示:
        cursor = activity.managedQuery(Uri.parse("content://sms/inbox"),
                new String[] { "_id", "address", "read", "body" }, "address=? and read=?",
                new String[] {"要监听的短信号码,如果是手机号码一定要记得在手机号码前加“+86”,如果不是手机号码则不用加", "0" }, "_id desc");
        // 按短信id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了
        if (cursor != null && cursor.getCount() > 0) {
            cursor.moveToFirst();
            if (cursor.moveToFirst()) {
                String smsbody = cursor
                        .getString(cursor.getColumnIndex("body"));
                String regEx = "(?<![0-9])([0-9]{" + 6 + "})(?![0-9])";
                Pattern p = Pattern.compile(regEx);
                Matcher m = p.matcher(smsbody.toString());
                while (m.find()) {
                    smsContent = m.group();
                    editText.setText(smsContent);
                }
            }
        }
    }
}



在Activity中的操作:

AutoGetCode autoGetCode = new AutoGetCode(MainActivity.this, new Handler(),
                text);//regist_code 要显示验证码的EditText
        // 注册短信变化监听
        this.getContentResolver().registerContentObserver(
                Uri.parse("content://sms/"), true, autoGetCode);
}

权限:

 <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取手机短信验证码需要使用 Android 的 SMS 模块,代码如下: 1. 在 AndroidManifest.xml 文件添加以下权限: ``` <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> ``` 2. 在 Activity 注册 BroadcastReceiver,用来接收短信: ``` private BroadcastReceiver smsReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); if (pdus != null && pdus.length > 0) { SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); } String messageBody = messages[0].getMessageBody(); // 在这里获取短信验证码并进行处理 } } } } }; ``` 3. 在 Activity 的 onStart() 方法注册 BroadcastReceiver: ``` @Override protected void onStart() { super.onStart(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(smsReceiver, intentFilter); } ``` 4. 在 Activity 的 onStop() 方法取消注册 BroadcastReceiver: ``` @Override protected void onStop() { super.onStop(); unregisterReceiver(smsReceiver); } ``` 注意:在获取短信验证码时要注意权限问题,另外不同手机型号上获取短信验证码的方式可能会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值