Android 自动获取验证码的两种方式分别是BroadcastReceiver及ContentObserver,两种方式都需要进行注册、取消注册两个步骤
记得添加权限,本文先介绍其中一种。
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_SMS"/>
方式一:BroadcastReceiver 自定义广播
/** * Created by weifeiyang on 2016/7/29 0029. */ import android.annotation.TargetApi; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.telephony.SmsMessage; import android.util.Log; /** * 短信监听 * * @author */ public class SMSBroadcastReceiver extends BroadcastReceiver { private static MessageListener mMessageListener; public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";//只要注册声明权限即可收到、阻断 @TargetApi(Build.VERSION_CODES.M) @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(SMS_RECEIVED_ACTION)) { //获得短信数据 Object[] pdus = (Object[]) intent.getExtras().get("pdus"); //短信的类型, GSM与CDMA短信的解码方式不同 String format = intent.getStringExtra("format"); if (null != pdus) { for (Object pdu : pdus) { Log.e("pdu", "format" + format); //23以上版本显示 createFromPdu过时,多加一个format参数即可 SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu, format); //发送号码-可以过滤需要读取的短信的发送号码 String sender = smsMessage.getDisplayOriginatingAddress(); //短信内容 String content = smsMessage.getDisplayMessageBody(); if (content.contains("你从服务器上获取到的验证码")){ mMessageListener.onReceived(content); abortBroadcast();//中断广播的继续传递,防止优先级低的获取到 } } } } } //回调接口 public interface MessageListener { public void onReceived(String message); } public void setOnReceivedMessageListener(MessageListener messageListener) { this.mMessageListener = messageListener; } }
其中关于format的解释如下,3GPP与3GPP2扫盲
3GPP
3GPP是针对GSM手机,扩展名为.3gp。第三代合作伙伴计划(3rdGenerationPartnershipProject,即3GPP)是一个成立于1998年12月的标准化机构。目前其成员包括欧洲的ETSI、日本的ARIB和TTC、中国的CCSA、韩国的TTA和北美的ATIS。
3GPP的目标是在ITU的IMT-2000计划范围内制订和实现全球性的(第三代)行动电话系统规范。它致力于GSM到UMTS(WCDMA)的演化,虽然GSM到WCDMA空中接口差别很大,但是其核心网采用了GPRS的框架,因此仍然保持延续性。
3GPP2
3GPP2是针对CDMA手机,扩展名为.3g2。第三代合作伙伴计划2(3rdGenerationPartnershipProject2,即3GPP2)建立于1998年12月,成员包括:TIA(北美)、CCSA(中国)、ARIB/TTC(日本)和TTA(韩国)。
3GPP2致力于使ITU的IMT-2000计划中的(3G)行动电话系统规范在全球的发展,实际上它是从2G的CDMAOne或者IS-95发展而来的CDMA2000标准体系的标准化机构,它受到拥有多项CDMA关键技术专利的高通公司的较多支持。
3GPP和3GPP2两者实际上存在一定竞争关系,3GPP2致力于以IS-95(在北美和韩国应用广泛的CDMA标准,联通CDMA与之兼容)向3G过渡,和高通公司关系更加紧密。与之对应的3GPP致力于从GSM向WCDMA(UMTS)过渡,因此两个机构存在一定竞争。
广播有了后就可以使用了,在activity或者fragment的onCreate方法中调用initSMSBroadcastReceiver()进行注册,在onDestroy()中通过
//注销短信监听广播
this.unregisterReceiver(mSMSBroadcastReceiver);取消注册
/** * 初始化短信监听广播 */ private void initSMSBroadcastReceiver() { //生成广播处理 mSMSBroadcastReceiver = new SMSBroadcastReceiver(mContent); //实例化过滤器并设置要过滤的广播 IntentFilter intentFilter = new IntentFilter(SMSBroadcastReceiver.SMS_RECEIVED_ACTION); //优先级最高 intentFilter.setPriority(Integer.MAX_VALUE); //注册广播 this.registerReceiver(mSMSBroadcastReceiver, intentFilter); mSMSBroadcastReceiver.setOnReceivedMessageListener(new SMSBroadcastReceiver.MessageListener() { @Override public void onReceived(String message) { TLog.error("message" + message); String code = ReadSmsContent.getDynamicPassword(message); seCodeEditText.setText(code); } }); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Android自动获取短信验证码功能,包括了Android自动获取短信验证码功能的使用技巧和注意事项,需要的朋友参考一下 先给大家展示下效果图,如果大家感觉不错,请参考实现代码。 1.自定义监听类 2.在登录页面事件化监听类 3.声明读取短信权限 4.为了防止内存泄漏,记得注销监听 小结: 去短信库获取短信比较不容易被拦截 以上所述是小编给大家介绍的Android自动获取短信验证码功
接口说明 获取验证码 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/server/1.0.0/getValidCode 是否需要登录 否 请求字段说明 无 响应字段说明 无 响应成功示例 {} 响应失败示例 {} 响应接受类型 image/jpeg;charset=UTF-8 响应状态码 HTTP状态码 原因 204 N
本文向大家介绍Android 中使用ContentObserver模式获取短信用正则自动填充验证码,包括了Android 中使用ContentObserver模式获取短信用正则自动填充验证码的使用技巧和注意事项,需要的朋友参考一下 最近做注册的时候看到很多app在手机接受到短信的时候直接填写验证码到界面省略用户自动输入,感觉这样确实蛮人性化的呵呵,于是自己也做了一个 步骤: 首先我使用了Conte
本文向大家介绍Android实现短信验证码获取自动填写功能(详细版),包括了Android实现短信验证码获取自动填写功能(详细版)的使用技巧和注意事项,需要的朋友参考一下 现在的应用在注册登录或者修改密码中都用到了短信验证码,那在android中是如何实现获取短信验证码并自动填写的呢? 首先,需要要在manifest中注册接收和读取短信的权限: <uses-permission android:
接口说明 获取验证码图片 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/cap
错误: TypeError:无法读取未定义的LoginForm c:/reactjs/hello-world/src/components/accountbox/LoginForm.js的属性“state”:23 2023 value={this.state.input.email}^24 onchange={this.handlechange}25 class=“form-control”26
本文向大家介绍Android实现短信验证码自动拦截读取功能,包括了Android实现短信验证码自动拦截读取功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android短信验证码自动拦截读取 的具体代码,供大家参考,具体内容如下 知识准备: 1.观察者模式的理解【文章稍后来到~~】 2.Android的Cursor使用【Android基础】 3.正则表达式使用【Java基础
我已经实现了swipe以将其删除到我的RecycerView中。它触发2个功能(编辑记录和删除)。如果你向左滑动,你编辑它,如果向右滑动,你删除它。我在RecycerView项的一般部分下有这样的布局