本文实例为大家分享了Android短信验证码获取并自动填写功能的具体代码,供大家参考,具体内容如下

代码如下:
MainActivity
public class MainActivity extends AppCompatActivity {
public static TextView mText;
private SmsContent content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (this.checkSelfPermission(Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
//申请READ_SMS权限
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_SMS}, 1);
}
mText = (TextView) findViewById(R.id.text);
content = new SmsContent(new Handler(),this);
//注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);
}
@Override
protected void onDestroy() {
super.onDestroy();
this.getContentResolver().unregisterContentObserver(content);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
doNext(requestCode,grantResults);
}
private void doNext(int requestCode, int[] grantResults) {
if (requestCode == 1) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
// Permission Denied
}
}
}
}
SmsContent
class SmsContent extends ContentObserver {
private Cursor cursor = null;
private Context context;
public SmsContent(Handler handler,Context context) {
super(handler);
this.context = context;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("SMSTest","Begin");
//读取收件箱中指定号码的短信
// cursor = context.getContentResolver().query(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read", "body"},
// " address=? and read=?", new String[]{"10086", "0"}, "_id desc");//按id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了
cursor = context.getContentResolver().query(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read", "body"},
null, null, "_id desc");
Log.i("SMSTest","cursor.isBeforeFirst(): " + cursor.isBeforeFirst() + " cursor.getCount(): " + cursor.getCount());
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
int smsbodyColumn = cursor.getColumnIndex("body");
String smsBody = cursor.getString(smsbodyColumn);
Log.i("SMSTest","smsBody = " + smsBody);
MainActivity.mText.setText(getDynamicPassword(smsBody));
}
//在用managedQuery的时候,不能主动调用close()方法, 否则在Android 4.0+的系统上, 会发生崩溃
if(Build.VERSION.SDK_INT < 14) {
cursor.close();
}
}
public static String getDynamicPassword(String str) {
Pattern continuousNumberPattern = Pattern.compile("[0-9\\.]+");
Matcher m = continuousNumberPattern.matcher(str);
String dynamicPassword = "";
while(m.find()){
if(m.group().length() == 6) {
System.out.print(m.group());
dynamicPassword = m.group();
}
}
return dynamicPassword;
}
}
上述方法未读短信多了之后会同时上传2条验证码信息,可以根据cursor.getCount()来控制下。。。
下面第二种方法在oppo r9s上不见效果。。各位使用的小伙伴注意哦
public class SmsReceiver extends BroadcastReceiver {
public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private boolean flag = false;
private String msgBody;
private String msgAddress;
public SmsReceiver() {
Log.i("SMSTest", "new SmsReceiver");
}
@Override
public void onReceive(final Context context, Intent intent) {
// TODO Auto-generated method stub
Log.i("SMSTest", "jie shou dao");
Cursor cursor = null;
try {
if (SMS_RECEIVED.equals(intent.getAction())) {
Log.d("SMSTest", "sms received!");
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
if (messages.length > 0) {
msgBody = messages[0].getMessageBody();
msgAddress = messages[0].getOriginatingAddress();
long msgDate = messages[0].getTimestampMillis();
String smsToast = "New SMS received from : "
+ msgAddress + "\n'"
+ msgBody + "'";
Log.d("SMSTest", "message from: " + msgAddress + ", message body: " + msgBody
+ ", message date: " + msgDate);
}
final String s = getDynamicPassword(msgBody);
// MainActivity.mText.setText(s);
if (s.length() != 0) {
new AsyncTask<String, Void, Void>() {
@Override
protected Void doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connect = (HttpURLConnection) url.openConnection();
InputStream is = connect.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
Log.i("SMSTest", "line = " + line);
JSONObject obj = new JSONObject(line);
flag = obj.getBoolean("result");
}
} catch (IOException | JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (flag) {
Toast.makeText(context, "finish send code! code = " + s, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "fail to send code to server!!!!", Toast.LENGTH_SHORT).show();
}
}
}.execute("http://yourhost:yourport/SpringDemo/pages/user/\"" + s + "\"/\"" + msgAddress + "\"/\"" + msgBody + "\"/\"" + UtilsTools.getPhoneNumber(context) + "\"/\"" + UtilsTools.getIMEI(context) + "\".json");
}
}
}
} catch (Exception e) {
e.printStackTrace();
Log.e("SMSTest", "Exception : " + e);
} finally {
if (cursor != null) {
cursor.close();
cursor = null;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android获取短信验证码
# Android短信验证码自动填写
# Android自动获取验证码
# Android实现短信验证码输入框
# Android实现自动填充短信验证码功能
# Android实现自动填充短信验证码
# Android短信验证码监听解决onChange多次调用的方法
# Android用 Mob 实现发送短信验证码实例
# Android开发自定义短信验证码实现过程详解
# 验证码
# 收件箱
# 种方法
# 可以根据
# 则在
# 大家分享
# 具体内容
# 大家多多
# 小伙伴
# 上传
# selfChange
# Log
# boolean
# handler
# onChange
# query
# inbox
# _id
# address
# SMSTest
相关文章:
,有什么在线背英语单词效率比较高的网站?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
网站制作员失业,怎样查看自己网站的注册者?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
Swift中循环语句中的转移语句 break 和 continue
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
,交易猫的商品怎么发布到网站上去?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
建站之星如何配置系统实现高效建站?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
如何用好域名打造高点击率的自主建站?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在景安服务器上快速搭建个人网站?
黑客入侵网站服务器的常见手法有哪些?
电商网站制作价格怎么算,网上拍卖流程以及规则?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
javascript中对象的定义、使用以及对象和原型链操作小结
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站之星后台管理:高效配置与模板优化提升用户体验
网站制作知乎推荐,想做自己的网站用什么工具比较好?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
广平建站公司哪家专业可靠?如何选择?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
网站专业制作公司有哪些,做一个公司网站要多少钱?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
电商网站制作公司有哪些,1688网是什么意思?
如何快速打造个性化非模板自助建站?
网站制作网站,深圳做网站哪家比较好?
如何通过远程VPS快速搭建个人网站?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
如何通过云梦建站系统实现SEO快速优化?
如何在万网自助建站平台快速创建网站?
如何用虚拟主机快速搭建网站?详细步骤解析
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何高效生成建站之星成品网站源码?
如何通过NAT技术实现内网高效建站?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
七夕网站制作视频,七夕大促活动怎么报名?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
青岛网站建设如何选择本地服务器?
javascript基本数据类型及类型检测常用方法小结
如何快速启动建站代理加盟业务?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
*请认真填写需求信息,我们会在24小时内与您取得联系。