android 获取短信验证码

(1).

/**
 * 短信监听
 * @author
 *
 */
public class SMSBroadcastReceiver extends BroadcastReceiver {
    private static MessageListener mMessageListener;
    public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
    public SMSBroadcastReceiver() {
        super();
    }

    @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();
                long date = smsMessage.getTimestampMillis();
                Date tiemDate = new Date(date);
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String time = simpleDateFormat.format(tiemDate);
                //过滤不需要读取的短信的发送号码,,在这里我们可以稍微处理,根据用户输入的号码可以实现短信防火墙。
                /*if ("+8613450214963".equals(sender)) {
                    if(mMessageListener!=null){
                        mMessageListener.onReceived(content);
                        abortBroadcast();
                    }
                }*/
                if(mMessageListener!=null){
                    mMessageListener.onReceived(content);
                    abortBroadcast();    //终止广播
                } 
            }
        }
    }

    //回调接口
    public interface MessageListener {
        public void onReceived(String message);
    }


    public void setOnReceivedMessageListener(MessageListener messageListener) {
        this.mMessageListener = messageListener;
    }
}

(2).

AndroidManifest.xml中:

  <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
    ...........

        <receiver android:name=".SMSBroadcastReceiver">
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

   </application>

(3).

代码中:

@Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                edtPassword = (EditText) findViewById(R.id.password);
                //生成广播处理
                mSMSBroadcastReceiver = new SMSBroadcastReceiver();
                //实例化过滤器并设置要过滤的广播
                //IntentFilter intentFilter = new IntentFilter(ACTION);
                //intentFilter.setPriority(Integer.MAX_VALUE);
                //注册广播
                //this.registerReceiver(mSMSBroadcastReceiver, intentFilter);
                mSMSBroadcastReceiver.setOnReceivedMessageListener(new SMSBroadcastReceiver.MessageListener() {
                            @Override
                            public void onReceived(String message) {
                                Log.i("XXX", "onReceive,message="+message);
                                edtPassword.setText(message);
                            }
                });
    }

注:

如果你在代码中也动态注册了receiver:

         mSMSBroadcastReceiver = new SMSBroadcastReceiver();
 //实例化过滤器并设置要过滤的广播
IntentFilter intentFilter = new IntentFilter(ACTION);
intentFilter.setPriority(Integer.MAX_VALUE);
//注册广播
this.registerReceiver(mSMSBroadcastReceiver, intentFilter);

会打印两次:    Log.i("XXX", "onReceive,message="+message); 也就是说有两次接收的行为。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值