Android短信自动添加功能

场景:注册登录App时需要发送验证码,接收验证码时直接现在在app中

1.onCreate中调用initMessage方法

   private void initMessage() {
	        SMSBroadcastReceiver mSMSBroadcastReceiver=new SMSBroadcastReceiver();
	        mSMSBroadcastReceiver.setOnReceivedMessageListener(new SMSBroadcastReceiver.MessageListener() {
	            public void OnReceived(String message) {
	            	edit.setText(getDynamicPassword(message));
	              Toast.makeText(MainActivity.this, getDynamicPassword(message), Toast.LENGTH_LONG).show();
	            }
	        });}

2.getDynamicPassword正则校验,短信为6位数字并且短信里包含“测试应用”四个字

public String getDynamicPassword(String str) {
	        // 6是验证码的位数一般为六位
	        Pattern continuousNumberPattern = Pattern.compile("(?<![0-9])([0-9]{"
	                + 6 + "})(?![0-9])");
	        Matcher m = continuousNumberPattern.matcher(str);
	        Matcher mm=Pattern.compile("测试应用").matcher(str);
	        String dynamicPassword = "";
	        while (m.find() && mm.find()) {
	            System.out.print(m.group());
	            dynamicPassword = m.group();
	        }

	        return dynamicPassword;
	    }
public class SMSBroadcastReceiver extends BroadcastReceiver {
    private static MessageListener mMessageListener;
    public SMSBroadcastReceiver() {
        super();
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
             Object [] pdus= (Object[]) intent.getExtras().get("pdus");
             for(Object pdu:pdus){
                SmsMessage smsMessage=SmsMessage.createFromPdu((byte [])pdu);
                String sender=smsMessage.getDisplayOriginatingAddress();
                String content=smsMessage.getMessageBody();
                long date=smsMessage.getTimestampMillis();
                Date timeDate=new Date(date);
                SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String time=simpleDateFormat.format(timeDate);
                 
                System.out.println("短信来自:"+sender);
                System.out.println("短信内容:"+content);
                System.out.println("短信时间:"+time);
                 
                mMessageListener.OnReceived(content);
                 
                //如果短信来自5556,不再往下传递
                if("5556".equals(sender)){
                    System.out.println(" abort ");
                    abortBroadcast();
                }
                 
             }
    }
     
    // 回调接口
        public interface MessageListener {
            public void OnReceived(String message);
        }
 
        public void setOnReceivedMessageListener(MessageListener messageListener) {
            this.mMessageListener=messageListener;
        }
}
3.权限添加:
  <!-- 发送短信-->
 <uses-permission android:name="android.permission.SEND_SMS" />
   <!-- 阅读消息 --> 
    <uses-permission android:name="android.permission.READ_SMS" />
   <!--  v写入消息--> 
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <!-- 接收消息 -->
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
4.广播接收者配置

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





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值