大佬教程收集整理的这篇文章主要介绍了Android采取BroadcastReceiver方式自动获取验证码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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"/>
/** * 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采取BroadcastReceiver方式自动获取验证码全部内容,希望文章能够帮你解决Android采取BroadcastReceiver方式自动获取验证码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。