Android 获取短信验证
Android 获取短信验证
Android 获取短信验证
输入发短信的手机号,点击获取验证码,等接收到验证码后就会自动获取
SmsReceiver.Java
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.telephony.SmsMessage;public class SmsReceiver extends BroadcastReceiver {private Handler handler;public SmsReceiver(Handler handler) {this.handler = handler;}@Overridepublic void onReceive(Context context, Intent intent) {// 获取短信类型String format = intent.getStringExtra("format");Bundle bundle = intent.getExtras();// 提前短信消息Object[] pdus = (Object[]) bundle.get("pdus");SmsMessage[] messages = new SmsMessage[pdus.length];if (Build.VERSION.SDK_INT >= 23) {for (int i = 0; i < messages.length; i++) {// 此方法适用于Android6.0messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format);}} else {for (int i = 0; i < messages.length; i++) {messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);}}String number = messages[0].getOriginatingAddress();String content = "";for (SmsMessage message : messages) {// 获取短信内容content += message.getMessageBody();}Message message = handler.obtainMessage();message.what = 123;Bundle bundle1 = new Bundle();bundle.putString("number", number);bundle.putString("content", content);message.setData(bundle);handler.sendMessage(message);}}
ReceiveMessage.Java
import android.Manifest;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import com.xxh.test1.R;public class ReceiveMessage extends AppCompatActivity {private EditText smsContent;private EditText smsNumber;private SmsReceiver smsReceiver;private Handler handler = new Handler() {@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);if (msg.what == 123) {Bundle bundle = msg.getData();smsContent.setText(bundle.getString("content"));smsNumber.setText(bundle.getString("number"));unregisterReceiver(smsReceiver);}}};@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_receive);initView();}private void initView() {smsContent = (EditText) findViewById(R.id.confirm_text);smsNumber = (EditText) findViewById(R.id.confirm_number);Button smsButton = (Button) findViewById(R.id.confirm_button);smsButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {getPermission();}});}public void registerSmsReceiver() {IntentFilter receiverFilter = new IntentFilter();receiverFilter.addAction("android.provider.Telephony.SMS_RECEIVED");smsReceiver = new SmsReceiver(handler);registerReceiver(smsReceiver, receiverFilter);}private void getPermission() {if (Build.VERSION.SDK_INT >= 23) {int checkCALLPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS);// 判断是否具有权限if (checkCALLPermission != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS}, 1);return;} else {registerSmsReceiver();}} else {registerSmsReceiver();}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case 1:if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "获取权限成功", Toast.LENGTH_SHORT).show();// 获取权限成功,发送短信registerSmsReceiver();} else {Toast.makeText(this, "获取权限失败", Toast.LENGTH_SHORT).show();}break;default:super.onRequestPermissionsResult(requestCode, permissions, grantResults);}}
}
activity_receive.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".receivemessage.ReceiveMessage"><EditTextandroid:id="@+id/confirm_number"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:hint="请输入电话号码"android:textSize="22sp" /><EditTextandroid:id="@+id/confirm_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:hint="短信内容"android:textSize="22sp" /><Buttonandroid:id="@+id/confirm_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:text="获取短信验证码" /></LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><uses-featureandroid:name="android.hardware.telephony"android:required="true" /><uses-permission android:name="android.permission.RECEIVE_SMS" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name_receive"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Learn"><activityandroid:name=".receivemessage.ReceiveMessage"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
相关文章:
Android 获取短信验证
Android 获取短信验证 Android 获取短信验证 输入发短信的手机号,点击获取验证码,等接收到验证码后就会自动获取 SmsReceiver.Java import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; impor…...
负载均衡详细概念介绍之(四层和七层实现)
目录 一、负载均衡介绍 1.1什么是负载均衡 编辑 1.2 为什么要用负载均衡 二、负载均衡的类型 2.1 通过一些硬件实现 2.2 四层负载均衡 2.3 七层负载均衡 三、四层和七层的区别 及特点 一、负载均衡介绍 1.1什么是负载均衡 负载均衡:Load Balance,简称LB&a…...
力扣 | 递增子序列 | 动态规划 | 最长递增子序列、最长递增子序列的个数、及其变式
文章目录 一、300. 最长递增子序列二、673. 最长递增子序列的个数三、变式1、646. 最长数对链2、1218. 最长定差子序列3、1027. 最长等差数列4、354. 俄罗斯套娃信封问题5、1964. 找出到每个位置为止最长的有效障碍赛跑路线 最长递增子序列:原序-递增数值问题 最长定…...
008 | 基于RNN和LSTM的贵州茅台股票开盘价预测
基于RNN和LSTM的贵州茅台股票开盘价预测 项目简介: 本项目旨在通过使用Tushare下载贵州茅台的股票数据,并基于这些历史数据,使用TensorFlow 2.0实现循环神经网络(RNN)和长短期记忆网络(LSTM)来…...
尚硅谷谷粒商城项目笔记——六、使用navciat连接docker中的mysql容器【电脑CPU:AMD】
六、使用navciat连接docker中的mysql容器 注意: 因为电脑是AMD芯片,自己知识储备不够,无法保证和课程中用到的环境一样,所以环境都是自己根据适应硬件软件环境重新配置的,这里的虚拟机使用的是VMware。 1navicat免费…...
【git】本地更改了,但又想直接从远端拉取覆盖本地(放弃本地更改前行下载)
拉取时错误信息 error: cannot pull with rebase: You have unstaged changes. error: Please commit or stash them.个错误信息表明你在尝试使用git pull --rebase命令时,你的工作目录中存在未提交的更改(即未暂存(unstaged)的更…...
基于JSP的书店仓库管理系统
你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:JSP 数据库:MySQL 技术:JSPJava 工具:ECLIPSE、Tomcat 系统展示 首页 管理员功能模块 用户功能模块 员工功能模…...
pytorch框架保存和加载模型
在 PyTorch 中,有几种常见的方法来保存和加载模型,具体方法取决于你想保存什么内容(例如,只保存模型的权重,还是保存整个模型)。下面我将介绍几种常见的保存和加载模型的方法。 1、保存和加载模型的 state…...
开发输出防护栏以检测GPT-4o幻觉
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
代码复现,代码改进,算法复现,模型复现
目前空闲可接硕士,博士,代码复现,改进代码,文献复现,算法复现,模型复现,文章复现,科研复现,可定制创新点,对比,模块,创新思路…...
基于STM32开发的智能机器人系统
目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 自动导航机器人家用服务机器人常见问题及解决方案 常见问题解决方案结论 1. 引言 智能机器人通过整合传感器、控制器和执行机构,能够自主完成环境感…...
【数据结构题目】循环队列,以及队列实现栈的模拟
前言: 🌟🌟Hello家人们,这期讲解数据结构队列的基础知识,希望你能帮到屏幕前的你。 📚️上期博客在这里:http://t.csdnimg.cn/oOkvk 📚️感兴趣的小伙伴看一看小编主页:G…...
大数据CloudSim应用实践:基于CloudSimExamle6.java修改(超详细教程)
文章目录 大数据CloudSim应用实践:基于CloudSimExamle6.java修改(超详细教程)1 准备1.1 操作系统1.2 软件 2 安装JDK2.1 安装JDK 3 配置Eclipse集成开发环境3.1 启动Eclipse3.2 配置Java运行时环境JRE 4 创建Java项目4.1 创建项目4.2 导入jar…...
完美解决浏览器的输入框自动填入时,黄色背景问题,以及图标被遮住问题(最新)
用图说话↓↓↓ 首先用代码解决黄色背景问题,box-shadow颜色设置透明即可,延时渲染时间可修改为更久 :deep(input:-webkit-autofill) {box-shadow: 0 0 0 1000px transparent !important;/* 浏览器记住密码的底色的颜色 */-webkit-text-fill-color: #f…...
C 语言中的头文件
1、C 语言中 include <> 与include “” 的区别? #include < > 引用的是编译器的类库路径里面的头文件。 #include " " 引用的是你程序目录的相对路径中的头文件,如果在程序目录没有找到引用的头文件则到编译器的类库路径的目录下找该头文…...
数据结构复杂度
文章目录 一. 数据结构前言1.1 数据结构1.2 算法 二. 算法效率2.1 时间复杂度2.1.1 T(N)函数式2.1.2 大O的渐进表示法 2.2 空间复杂度2.3 常见复杂度比较 2.3 复杂度算法题1.2. 一. 数据结构前言 1.1 数据结构 什么是数据结构呢?打开一个人的主页,有很…...
MySQL基础篇
一、MySQL概述 MySQL是一个数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle推出的产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(关系数据库管理系统) ,…...
详解C++中的四种强制转换reinterpret_cast / const_cast / static_cast / dynamic_cast
目录 1.reinterpret_cast 2.const_cast 3.static_cast 4.dynamic_cast 例子 C中存在四种强制转换:reinterpret_cast / const_cast / static_cast / dynamic_cast 1.reinterpret_cast 格式 : reinterpret_cast<type_id> (expression) 用于类型…...
Word中加载Mathtype后粘贴复制快捷键(Ctrl+C/V)不能使用
操作环境 windows 11操作系统 word版本2021 mathtype版本7.4 这个问题只出现在word中,在excel和ppt中都不存在这个问题,而且之前在另一台电脑中使用word2016版本并没有这种问题的,然后网上搜了一下有不少人有这种问题,word直接取…...
Linux硬件-bios
作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 在Linux的服务器领域,我们能接触的到硬件其实挺多的,但是在这些硬件我们根据我们的需要去使用的时候…...
解决IDE性能瓶颈与代码补全效率问题:TabNine AI引擎架构优化与生产环境部署实践
解决IDE性能瓶颈与代码补全效率问题:TabNine AI引擎架构优化与生产环境部署实践 【免费下载链接】TabNine AI Code Completions 项目地址: https://gitcode.com/gh_mirrors/ta/TabNine TabNine是一款基于人工智能的全语言代码自动补全工具,通过深…...
Windows 一键安装OpenClaw 教程|全流程无代码无需输命令
OpenClaw Windows 专属本地安装包 ,全程图形化、无需代码、自带依赖,支持微信 / 企业微信 / 钉钉 / 飞书一键联动,本地运行更安全。 一、安装前准备 系统:Windows 10/11 64 位内存:≥8GB必须关闭:360、火…...
BilibiliDown终极指南:3步轻松下载B站视频的完整教程
BilibiliDown终极指南:3步轻松下载B站视频的完整教程 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi…...
Fish Speech 1.5语音延迟优化:2-5秒响应背后的推理加速技巧
Fish Speech 1.5语音延迟优化:2-5秒响应背后的推理加速技巧 1. 引言:从分钟级到秒级的突破 还记得早期的文本转语音系统吗?输入一段文字,等待几分钟才能听到结果,那种焦急的体验让很多开发者望而却步。如今ÿ…...
卡证检测矫正模型与ChatGPT联动:打造智能问答审核助手
卡证检测矫正模型与ChatGPT联动:打造智能问答审核助手 你有没有遇到过这样的场景?用户上传了一张歪歪扭扭、光线昏暗的身份证照片,你需要手动把它摆正、调亮,然后一个字一个字地把姓名、身份证号敲进系统里核对。或者,…...
效率提升利器:用快马AI生成批量域名健康检查工具,告别手动刷新
效率提升利器:用快马AI生成批量域名健康检查工具,告别手动刷新 作为开发者或运维人员,我们经常需要监控一批服务域名的健康状态。比如最近公司新上线了一批jxx相关的域名,需要定期检查它们的可用性和响应速度。传统的手动刷新浏览…...
OpenClaw人人养虾:Windows (WSL2)
OpenClaw 在 Windows 上通过 WSL2(Windows Subsystem for Linux 2,适用于 Linux 的 Windows 子系统)运行。WSL2 提供完整的 Linux 环境,性能接近原生。 系统要求 项目要求Windows 版本Windows 10 (21H2) 或 Windows 11CPU支持虚…...
PyTorch 2.8动态计算图深度解析:自定义算子与性能优化技巧
PyTorch 2.8动态计算图深度解析:自定义算子与性能优化技巧 1. 动态计算图的核心魅力 PyTorch的动态计算图一直是其区别于其他深度学习框架的标志性特性。在2.8版本中,这个机制变得更加灵活高效。简单来说,动态计算图就像一张可以随时修改的…...
【MATLAB源码-第320期】基于matlab的混沌序列图像加密解密系统仿真,测试加解密速度、资源占用、模糊攻击测试、密钥空间和敏感性分析。
操作环境:MATLAB 2024a1、算法描述基于混沌序列的图像加密 与解密系统 随着数字信息技术的迅速发展,图像作为信息载体的使用越来越广泛。然而,图像数据在传输和存储过程中容易受到窃取、篡改或破坏,因此确保图像数据的安全性显得尤…...
Qwen3-ASR-0.6B高性能优化:CNN加速语音特征提取
Qwen3-ASR-0.6B高性能优化:CNN加速语音特征提取 语音识别技术正在快速融入我们的日常生活,从智能助手到实时字幕,都离不开高效的语音转文本能力。Qwen3-ASR-0.6B作为一款轻量级语音识别模型,在保证识别准确率的同时,更…...
