700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 自动填充短信验证码实现方式

自动填充短信验证码实现方式

时间:2022-06-07 09:19:50

相关推荐

自动填充短信验证码实现方式

自动填充短信验证码

短信验证码是大部分软件里面都存在的功能,同时为了避免用户自己输入导致的繁琐操作,有一部分app设计者将其设置成了自动填充的方式,方便用户操作那么这种方式是什么实现的呢。

利用广播接收器来拦截短信获取其中匹配的内容,提供回掉,将短信内容暴露到activity中实现自动填充

首先我们要实现一个广播接收器

package com.wquant.weilt.reciver;import java.util.regex.Matcher;import java.util.regex.Pattern;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.os.Message;import android.telephony.SmsMessage;import android.text.TextUtils;import android.util.Log;public class SmsReciver extends BroadcastReceiver {private String patternCoder = "(?<!\\d)\\d{6}(?!\\d)";@Overridepublic void onReceive(Context context, Intent intent) {//获取短信数据Object[] objs = (Object[]) intent.getExtras().get("pdus");for (Object obj : objs) {byte[] pdu = (byte[]) obj;//将字节数组封装成为smsmessage对象SmsMessage sms = SmsMessage.createFromPdu(pdu);//获得短短信内容String message = sms.getMessageBody();Log.d("短信内容", "message:" + message);// 短息的手机号。。+86开头?String from = sms.getOriginatingAddress();Log.d("短信来源", "from :" + from);if (!TextUtils.isEmpty(from)) {String code = patternCode(message);if (!TextUtils.isEmpty(code)) {mMessageListener.onReceived(code);}}}}/*** 匹配短信中间的6个数字(验证码等)* * @param patternContent* @return*/private String patternCode(String patternContent) {if (TextUtils.isEmpty(patternContent)) {return null;}Pattern p = pile(patternCoder);Matcher matcher = p.matcher(patternContent);if (matcher.find()) {return matcher.group();}return null;}// 回调接口public interface MessageListener {public void onReceived(String message);}MessageListener mMessageListener;public void setOnReceivedMessageListener(MessageListener messageListener) {this.mMessageListener = messageListener;}}

ok上面我们已经实现了广播接收器,在activity中我们要绑定一个意图过滤器并将此广播注册在destory方法中要将其解除注册

package com.wquant.weilt.controler;import org.apache.http.Header;import org.json.JSONException;import org.json.JSONObject;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.os.CountDownTimer;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.loopj.android.http.RequestParams;import com.wquant.weilt.MyApplication;import com.wquant.weilt.R;import com.wquant.weilt.control.base.JsonHttpResponseHandlerBase;import com.wquant.weilt.control.base.MyBaseActivity;import com.wquant.weilt.reciver.SmsReciver;import com.wquant.weilt.reciver.SmsReciver.MessageListener;import com.wquant.weilt.util.CToast;import com.wquant.monUtil;import com.wquant.weilt.util.Constant;import com.wquant.weilt.util.HttpUtil;/*** 修改密码* * @author zhaomy* */public class RestartLoginOrTradPwdActivity extends MyBaseActivity {SmsReciver reciver;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_restart_login_or_trad);init();}private void init() {code = (EditText) findViewById(R.id.register_code);reciver=new SmsReciver();IntentFilter filter = new IntentFilter();// 设置短信拦截参数filter.addAction("android.provider.Telephony.SMS_RECEIVED");//设置最大优先级filter.setPriority(Integer.MAX_VALUE);registerReceiver(reciver, filter);reciver.setOnReceivedMessageListener(new MessageListener() {@Overridepublic void onReceived(String message) {code.setText(message);}});}@Overrideprotected void onPause() {super.onPause();}@Overrideprotected void onDestroy() {unregisterReceiver(reciver);super.onDestroy();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。