我需要解析到应用程序的传入消息,但是我不知道该怎么做。这是我的接收者:
class SmsReceiver: BroadcastReceiver() {
companion object {
val ACTION = "android.provider.Telephony.SMS_RECEIVED"
val BANKMANE = ""
val SMS_BODY = "sms_body"
val PDUS = "pdus"
}
override fun onReceive(context: Context, intent: Intent) {
if (intent.action != null &&
ACTION.compareTo(intent.action, false) === 0) {
val pduArray = intent.extras.get(PDUS) as Array<Any>
val messages = arrayOfNulls<SmsMessage>(pduArray.size)
for (i in pduArray.indices) {
messages[i] = SmsMessage.createFromPdu(pduArray[i] as ByteArray)
}
val sms_from = messages[0]!!.getDisplayOriginatingAddress()
if (sms_from.equals(BANKMANE, ignoreCase = true)) {
val bodyText = StringBuilder()
for (i in 0 until messages.size) {
bodyText.append(messages[i]!!.getMessageBody())
}
val body = bodyText.toString()
val mIntent = Intent(context, SmsService::class.java)
mIntent.putExtra(SMS_BODY, body)
context.startService(mIntent)
abortBroadcast()
}
}
}}
这是我的Manifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application
...........
<receiver android:name=".smsParcer.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
</application>
我真的不明白如何使用此接收器,以及如何正确制作Mainfest.xml
。我找不到一些有关如何使用接收器的示例。我需要了解如何使接收者参与一些活动。我将不胜感激。
答案 0 :(得分:1)
您可以按照以下方式进行操作, 在您的onReceive中,
override fun onReceive(context: Context, intent: Intent) {
val data = intent.extras
if (data!!.get("pdus") != null) {
val pdus = data!!.get("pdus") as Array<Any>
for (i in pdus.indices) {
val smsMessage = SmsMessage.createFromPdu(pdus[i] as ByteArray)
val sender = smsMessage.displayOriginatingAddress
val messageBody = smsMessage.messageBody
if (messageBody.toLowerCase().contains("please use the verification code", ignoreCase = true)) {
try {
mListener!!.messageReceived(parseCode(messageBody))
}catch (e:NullPointerException)
{
}
}
}
}
}
======
解析器如下所示
======
private fun parseCode(msg: String): String {
var upToNCharacters: String? = null
try {
var message = msg
var part = arrayOf<String>()
try {
part = message.split("(?<=\\D)(?=\\d)".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
} catch (e: Exception) {
e.printStackTrace()
}
message = message.replace("FLAG", "")
upToNCharacters = part[1].substring(0, Math.min(part[1].length, 6))
Log.i("---->", upToNCharacters)
} catch (e: Exception) {
}
return upToNCharacters!!
}
=====
interface SmsListener {
fun messageReceived(messageText: String)
}
<receiver android:name=".common.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
在您的班级上,on简历
val receiver = ComponentName(this, SmsReceiver::class.java!!) //created SMSLog class above!
val pm = this.packageManager
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP)
try {
this.registerReceiver(smsReceiver, android.content.IntentFilter("android.provider.Telephony.SMS_RECEIVED"))
} catch (e: Exception) {
}
,然后在您的onStop()中注销您的broadcastReceiver
override fun onStop() {//
super.onStop()
try {
unregisterReceiver(smsReceiver)
} catch (e: Exception) {
}
disableBroadcastReceiver()
}