gpt4 book ai didi

android - 如何在Android中自动阅读短信?

转载 作者:行者123 更新时间:2023-12-05 00:16:33 25 4
gpt4 key购买 nike

从 2019 年 1 月 9 日起,谷歌将从 Playstore 中删除具有阅读短信和通话记录权限的应用程序,如果他们没有解释必要性的话。

Google 引入了 SMS Retriever API 以自动获取通过应用内的 SMS 发送的验证码。

但是那些API表达的不是很清楚,很困惑。不知道是不是我觉得比较乱。无论如何,这是我研究过的阅读短信的内容,但我什么也看不懂。

我不确定这是否是自动阅读短信的正确链接。

https://developers.google.com/identity/sms-retriever/request

我使用了这些依赖

implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:17.0.0'

有一个很好的教程来实现自动阅读短信,但一些 API 已被弃用,所以我试图找到任何简单的解释来在 Android 中实现自动阅读短信。

这是教程的链接

https://androidwave.com/automatic-sms-verification-android/

最佳答案

您应该使用短信检索器 api 来读取 otp 消息。以下是您可以如何做到这一点。

您需要以下 2 个依赖项来获取短信代码

implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:17.1.0'

在您的 Activity/fragment 中定义几个像这样的变量

private val SMS_CONSENT_REQUEST = 2
private lateinit var smsVerificationReceiver: BroadcastReceiver

在你的 onCreate() 方法中启动 SMS 检索器

 SmsRetriever.getClient(this).startSmsUserConsent(null)
smsReceiver()
val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
registerReceiver(smsVerificationReceiver, intentFilter)

广播接收方法如下

 private fun smsReceiver() {
smsVerificationReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
val extras = intent.extras
val smsRetrieverStatus = extras?.get(SmsRetriever.EXTRA_STATUS) as Status

when (smsRetrieverStatus.statusCode) {
CommonStatusCodes.SUCCESS -> {
// Get consent intent
val consentIntent =
extras.getParcelable<Intent>(SmsRetriever.EXTRA_CONSENT_INTENT)
try {
// Start activity to show consent dialog to user, activity must be started in
// 5 minutes, otherwise you'll receive another TIMEOUT intent
startActivityForResult(consentIntent, SMS_CONSENT_REQUEST)
} catch (e: ActivityNotFoundException) {
// Handle the exception ...
}
}
CommonStatusCodes.TIMEOUT -> {
// Time out occurred, handle the error.
}
}
}
}
}
}

然后在onActivityResult()中就可以得到验证码

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
// ...
SMS_CONSENT_REQUEST ->
// Obtain the phone number from the result
if (resultCode == Activity.RESULT_OK && data != null) {
// Get SMS message content
val message = data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE)
// Extract one-time code from the message and complete verification
// `message` contains the entire text of the SMS message, so you will need
// to parse the string.
val oneTimeCode = parseOneTimeCode(message) // define this function
et_otp.setText(oneTimeCode.toString())
// send one time code to the server
} else {
// Consent denied. User can type OTC manually.
}
}
}

也不要忘记在 onDestroy() 方法中注销接收器

 unregisterReceiver(smsVerificationReceiver)

关于android - 如何在Android中自动阅读短信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58726014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com