首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Kotlin -如何检测和读取收到的短信

在Android Kotlin中,可以使用Telephony库来检测和读取收到的短信。下面是一个完整的示例代码:

首先,在AndroidManifest.xml文件中添加以下权限:

代码语言:txt
复制
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

然后,在你的Activity中,可以创建一个BroadcastReceiver来接收短信:

代码语言:txt
复制
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.provider.Telephony
import android.telephony.SmsMessage
import android.widget.Toast

class SmsReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION == intent.action) {
            val messages = Telephony.Sms.Intents.getMessagesFromIntent(intent)
            for (message in messages) {
                val smsBody = message.messageBody
                val smsSender = message.originatingAddress
                Toast.makeText(context, "收到来自 $smsSender 的短信:$smsBody", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

接下来,在你的Activity中注册这个BroadcastReceiver:

代码语言:txt
复制
import android.Manifest
import android.content.IntentFilter
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {

    private val SMS_PERMISSION_REQUEST_CODE = 0
    private val smsReceiver = SmsReceiver()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if (checkPermission()) {
            registerReceiver()
        } else {
            requestPermission()
        }
    }

    private fun checkPermission(): Boolean {
        val smsPermission = Manifest.permission.READ_SMS
        val receiveSmsPermission = Manifest.permission.RECEIVE_SMS
        val granted = PackageManager.PERMISSION_GRANTED
        return ContextCompat.checkSelfPermission(this, smsPermission) == granted &&
                ContextCompat.checkSelfPermission(this, receiveSmsPermission) == granted
    }

    private fun requestPermission() {
        ActivityCompat.requestPermissions(
            this,
            arrayOf(Manifest.permission.READ_SMS, Manifest.permission.RECEIVE_SMS),
            SMS_PERMISSION_REQUEST_CODE
        )
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == SMS_PERMISSION_REQUEST_CODE) {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                registerReceiver()
            } else {
                Toast.makeText(this, "权限被拒绝,无法接收短信", Toast.LENGTH_SHORT).show()
            }
        }
    }

    private fun registerReceiver() {
        val intentFilter = IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)
        registerReceiver(smsReceiver, intentFilter)
    }

    override fun onDestroy() {
        super.onDestroy()
        unregisterReceiver(smsReceiver)
    }
}

上述代码中,我们在Activity的onCreate方法中首先检查是否有读取短信的权限,如果有权限则注册BroadcastReceiver,如果没有则申请权限。然后,在onRequestPermissionsResult方法中处理权限申请结果。最后,我们在onDestroy方法中取消注册BroadcastReceiver,以免内存泄漏。

请注意,由于涉及到敏感信息的读取,需要在运行时动态申请权限,并且在用户拒绝权限时给予相应的提示。

推荐的腾讯云相关产品:无

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android BroadcastReceiver接收收到短信广播

2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统状态信息。   3、使用场景:   ①当手机没有电时,会告知用户“电量低”广播信息。...可以做到正在使用app就会接收到这个广播消息,如果是游戏可能是提醒保存数据,如果是正在使用工作软件,可能提醒接上电源。...方法,如果执行,代表已经接收到广播   ④定义收到信息广播接收者,属于系统广播,则需要申请权限(静态,动态) 【项目结构】 ?...--接收收到信息广播-- </intent-filter </receiver 【MsgReceiver】 重写onReceiver方法,添加Toast import android.content.BroadcastReceiver...以及可以添加很多功能,接收到广播进行特定操作。

3.9K20

Android读取短信联系人

原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀Doi技术团队学习经历 读取短信联系人经常会用到...短信 开始切入正题,先说短信,要从数据库中获取数据,就要了解其结构 短信数据库在data-->data中下面路径 ?...data表,这个表中“data1”列几乎包含了我们想要数据,但是如何通过分类提取,第四列代号说明了data1数据类型,这些代号在mimetypes表中有对应说明,要找到这些数据,又要通过raw_contact_id..."/> 如过是Android 6.0以上版本还要动态获取权限 获取联系人效果图 ?...来获取_IDDISPLAY_NAME * _ID 该联系人索引 * 通过这个ID可以在ContactsContract.CommonDataKinds.Phone.CONTENT_URI

2.5K30
  • 如何kotlin开发同时支持iOSAndroid

    如何kotlin开发同时支持iOSAndroid库 虽说kotlin-native可以支持链接到c,java,objective-c等语言,甚至可以进行原生开发,但是在使用过程中并不友好,配置繁琐且...通过kotlin构建库不失为一个好办法,可以将iOS安卓共有的参数、model通用方法用kotlin写成库,并分别打包给两个平台使用,在未来应该是一个可行性方案。...由于现在kotlin-native还是没有推出正式版,不建议马上通过这种方式来开发项目,这里只是给未来开发提供了一种可能性。...、设置项目的GroupId、artifactId、 Version信息 四、选择gradle环境,如果选择本地配置,可以省去配置时间 五、配置项目名称存放路径,并Finish 写Demo代码 在根目录新建一个名为.../gradlew assemble 就会在项目根目录 build/libs文件夹下生成名为 leacode.kotlin-1.0-SNAPSHOT.jar 可以用于导入安卓项目使用 打iOSframework

    2.9K20

    安卓短信转发qq邮箱

    安卓短信转发qq邮箱 简介 准备工作 安装android开发环境 理解AS工程结构管理工具 管理工具Gradle AS工程结构 编程语言 怎么利用好github 怎么找到可用仓库 怎么利用好仓库...短信接收验证码提取 邮件发送 准备工作 安装android开发环境 archlinux安装androidStudio 理解AS工程结构管理工具 通过对开发工具了解,你能更加快速编写代码,更好理解其工作原理...下面给出了几个介绍链接 如何通俗地理解 Gradle android配置Gradle AS工程结构 AS项目结构 编程语言 kotlin 现在kotlin已经凭借自己良好特性取代Java成为开发安卓首推开发语言...我在github上搜索到一个较为符合仓库是sms-backup-plus,这个仓库代码用到了信息邮箱,但是是读取已经接收到信息,邮箱也用是国外账户,国内上不了。...app一点开就闪退的话很可能是没有给app权限(比如读取短信,连接网络) 10个错误有9个都是权限版本问题 TSC frequency mismatch between VM 解决方法 生成apk文件

    1.7K20

    Android内存泄露检测 LeakCanary2.0(Kotlin版)实现原理

    2.0版本实现内存监控基本原理以往版本差异不大,比较重要一点变化是2.0版本使用了自己hprof文件解析器,不再依赖于HAHA,整个工具使用语言也由Java切换到了Kotlin。...本文结合源码对2.0版本内存泄漏监控基本原理hprof文件解析器实现原理做一个简单地分析介绍。...2.1 检测实现 自动检测对象包含以下四类: 销毁Activity实例 销毁Fragment实例\ 销毁View实例 清除ViewModel实例 另外,LeakCanary也会检测 AppWatcher...registerResumedActivityListener(application) addDynamicShortcut(application) disableDumpHeapInTests() } 2.1.2 如何检测泄漏...至于泄漏对象识别原理之前版本并没有差异。 作者:vivo 互联网客户端团队-Li Peidong

    1.8K20

    ​使用KotlinAndroid Studio开发Android应用详细教程

    引言Android开发是移动应用开发领域中一个重要方向,而Kotlin作为一种现代、表达力强大编程语言,逐渐成为Android开发首选语言。...本教程将详细介绍如何使用KotlinAndroid Studio开发一个简单Android应用,包括项目的创建、界面设计、代码编写以及运行应用。...步骤1:安装Android Studio配置环境首先,确保你系统中已经安装了最新版本Android Studio。你可以从官方网站下载并按照安装指南进行安装。...安装完成后,打开Android Studio,确保SDK其他必要组件已成功安装。创建或导入一个新Android项目。步骤2:创建新Android项目打开Android Studio。...你已经成功创建并运行了一个简单Android应用程序,使用了Kotlin语言和Android Studio进行开发。这只是一个简单入门示例,你可以根据需要扩展应用,添加更多功能界面元素。

    1.1K10

    首款采用Kotlin语言编写恶意APP现身Google Play商店

    但实际上,它能够执行恶意远程命令、信息窃取、未经授权SMS发送URL转发以及点击或广告诈骗。同时,它还能够在未经许可情况下,给受害者注册高级短信订阅服务。...Kotlin是一个基于JVM新型编程语言,由 JetBrains 开发。它被描述为拥有以下几个优点: 比Java更简洁,大大减少了样板代码数量; 比Java更安全,能够静态检测常见陷阱。...如:引用空指针; 可以利用JVM、Android浏览器现有库进行互操作; 兼容很多现有工具,因为它能够选择任何Java IDE或从命令行构建(Android Studio 3.0提供了帮助用户使用Kotlin...可以在将Java代码粘贴到Kotlin文件中时即时转换所有Java文件或代码片段。 谷歌公司于2017年5月宣布 Kotlin为编写Android应用程序主流语言之一。...自Kotlin发布以来,17%Android Studio项目开始使用该编程语言。诸如Twitter、PinterestNetflix这样顶级应用程序都是使用Kotlin编写

    1.6K60

    检测Android应用启动关闭

    我们先来看一个简单例子,一个应用只有一个activity并且不支持全屏,这个activityonStartonStop方法就决定了这个应用是打开还是关闭。...application类onCreate方法首先需要订阅,这样才能保证每次应用进入或退出前台时候能收到通知。...论应用如何启动 到目前为止,我们知道了如何检测应用是什么时候被打开或者关闭,但是我们还不知道应用是如何被打开。...在这段代码中,我在application类中添加了一个枚举类型变量用来记录应用是如何被打开。这个建立在上一个例子基础之上,所以我们打印一下日志,来看看应用是什么时候被打开如何被打开。...现在你不仅可以检测应用什么时候启动或关闭,还可以检测出它是如何启动。 最后,再次感谢翻译人员以及原作者

    3.2K30

    Android经典面试题之Kotlin如何隐藏DialogFragmentDialog导航栏

    DialogFragment隐藏导航栏 在 Android 中,使用 DialogFragment 显示对话框时,如果您希望隐藏系统导航栏(如状态栏导航键),可以通过设置相关系统 UI 标志来实现。...以下是一个完整例子,展示了如何在 DialogFragment 中隐藏系统导航栏(使用 Kotlin): import android.os.Bundle import android.view.View...这种方法允许您 DialogFragment 在显示时全屏,并隐藏状态栏导航栏。...Dialog中隐藏导航栏 在 Android 中,如果想在 Dialog 中隐藏系统导航栏(包括状态栏底部导航键),可以通过设置窗口属性来实现。...let { … }: 为了确保 window 不为 null,使用 Kotlin 安全调用操作符 ?. 来使用窗口对象。 setLayout 方法将对话框设置为全屏。

    11210

    Kotlin 协程 Android SQLite API 中线程模型

    从 Room 2.1 版本之后,开发者们可以通过定义 suspend DAO 函数来使用 Kotlin 协程了。...在我们为 Room 添加协程支持期间,我们遇到并解决了在协程模型 Android SQL API 中没想到一些问题。在本篇文章中,我们会向您阐述我们遇到这些问题,以及我们解决方案。... SQLite 事务受制于单个线程 上述代码中问题在于 Android SQLite 事务是受制于单个线程。...中 SQLite 线程限制是合理,这在 Kotlin 还没出现时已然如此设计了。...直接取消 Android 线程对 SQLite 事务限制是不可行,因为我们希望提供一个向后兼容解决方案,而上述这些方法组合最终让我们在使用协程 Fluent API 解决方案中发挥了创造性。

    1.9K20

    Android经典面试题之Kotlin中 if let区别

    欢迎点击上方"AntDream"关注我,每天进步一 在Kotlin中,iflet虽然有时候用来处理相似的情景,但它们实际上是用于不同场景并具有不同性质。...下面我们来详细对比一下这两者区别: if 语句 if 是一种控制结构,用于条件判断。它可以有一个或多个条件分支,并且可以返回值。if 语句在Kotlin中类似于其他语言if语句。...返回值:if表达式可以有返回值,这使它与Java中if语句有所不同,因为在Kotlin中if是有返回值表达式。 嵌套多分支:可以嵌套使用,并支持多分支 (else if)。...let 函数 let 是Kotlin标准库中一个扩展函数,通常用于对非空对象执行某些操作。它主要目的是避免显式null检查,并且作用域内将对象以it形式暴露出来。...选择使用if还是let,取决于你具体需求和场景。在不需要null安全或作用域控制简单条件判断中,使用if更为直观;在处理可空类型并需要对非空值进行操作时,使用let则更为简洁优雅。

    14810

    Uniapp、Html5plus、Native.js开发记录

    Android程序员把“场景”抽象为Context类,他们认为用户操作系统每一次交互都是一个场景....: _id:短信序号,如100 address:发件人地址,即手机号,如+8613811810000,这里需要注意是手机号是否加+86,可以加上86不加86分别测试下 person:发件人,如果发件人在通讯录中则为具体姓名...,1MMS_PROTO彩信 read:是否阅读0未读,1已读 status:短信状态-1接收,0complete,64pending,128failed type:短信类型1是接收到,2是已发出 body...:短信具体内容 读取短信内容uri为: Uri uri = Uri.parse(“content://sms”); //读取所有短信 Uri uri = Uri.parse(“content://sms.../inbox”); //读取收件箱短信 2022-11-06 1.uts uts,全称 uni type script,是一门跨平台、高性能、强类型现代编程语言。

    3K50

    Android 8.0 读取内部外部存储以及外置SDcard方法

    最近碰到询问我这个读取SDcard问题, 很久没有看这部分了,所以大致看了一下, 顺便记录一下。在Android 8.0上做了测试。...一般Android App能读取存储空间主要有三种: app自己私有目录,也就是/data/data/《app 目录》。 读写这个目录不需要单独权限。...这个权限是正对整个/sdcard,不区分子目录, 也就是说一旦你申请权限你可以对整个/sdcard上所有文件目录有操作权限。...Android里无法通过申请权限来获取读写权利。 这一点上面说2不同。 因此,如果需要获取写权限, 需要用户指定特定目录单独授权。这里举个简单例子。...以上这篇Android 8.0 读取内部外部存储以及外置SDcard方法就是小编分享给大家全部内容了,希望能给大家一个参考。

    2K20

    作为一只爬虫,如何科学有效地处理短信验证码?

    但还有一种验证码此种情况不同,那就是手机验证码,比如 PC 上需要输入手机号,然后短信验证码需要发到手机上,然后再在 PC 上把收到验证码输入即可通过验证。...那这里关键部分其实就是怎样完成这两个步骤: 如何监听手机收到短信 如何将手机短信转发到想要位置 这两个步骤缺一不可,而且都需要在手机上完成。...“注意:这里我们仅仅简单介绍基本思路,不会完全详细展开介绍具体代码实现,感兴趣的话可以自行尝试。 ” 首先如何监听手机收到短信呢?...在 Android 开发中,整体就分为三个必要环节: 注册读取短信权限:在一个 Android App 中,读取短信是需要特定权限,所以我们需要在 Andriod App AndroidManifest.xml...中将读取短信权限配置好,比如接收短信权限配置如下: </uses-permission

    3.6K30

    开启QQ登录保护仍被盗号——QQ安全机制全面分析

    QQ登录保护安全机制: 当我们开启了“登录保护”,盗号者登录QQ输入正确密码,即使更换IP骗过了安全检测系统,会发现仍然需要验证密保手机短信数字验证码才能真正登录成功,由于手机随时带在我们身边...2、绕过安全检测   被盗号同学表示并未收到短信验证码,当时我就在想:难道攻击者找到某种途径绕过了腾讯安全检测?   首先,绕过异地登录检测可以通过修改IP地址来实现。上一期:传送门。...那么接下来只需要绕过新设备检测就可以了,那么QQ是如何判断是否是新设备呢。   你要是觉得QQ判断新设备有这么简单,那就太天真了。如果真有这么简单,QQ绝不会到现在还能安然无恙运营。...7.0之后读取 /sys/class/net/wlan0/address 也获取不到了。   另外,Android 9.0及以上版本默认使用了“随机MAC地址”。...由于盗号者不知道QQ是依据哪些信息来生成ID,也不知道生成ID算法是怎样计算,所以无法伪造成原设备ID。 总结   那么为什么那些被盗QQ同学没有收到短信验证呢?

    3.5K10
    领券