【问题标题】:How to get full length body text from received SMS in kotlin?如何从 kotlin 中收到的短信中获取完整的正文?
【发布时间】:2019-04-05 07:01:57
【问题描述】:

我在清单中声明了传入 SMS 的接收器:

<receiver
        android:name=".WakeupReceiver"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.RECEIVE_SMS"
        android:stopWithTask="false">
        <intent-filter android:priority="999999857">
            <category android:name="android.intent.category.DEFAULT" />

            <action android:name="android.intent.action.SMS_RECEIVED_ACTION" />
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter> 
</receiver>

我在 .WakeupReceiver 中有一个 onReceive 函数:BroadcastReceiver() 类,它具有从接收到的 SMS 中获取数据的函数:

override fun onReceive(context: Context, intent: Intent) {
    val (smsContact, smsBody) = getSMSContent(intent)

    //Do stuff with sms content here
}

fun getSMSContent(intent: Intent): Pair<String, String> {
        val data = intent.extras
        val pdusObj = data!!.get("pdus") as Array<*>
        for (i in pdusObj.indices) {
            val currentMessage = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
                Telephony.Sms.Intents.getMessagesFromIntent(intent)[0]
            else SmsMessage.createFromPdu(pdusObj[0] as ByteArray)

            // TODO: Here we get the all information about SMS.
            //Apply your conditions and logic here to filter your SMS from various SMS
            // and extract your content from message body

            val phoneNumber = currentMessage.displayOriginatingAddress
            Log.e("receiver", phoneNumber)

            val senderNum = phoneNumber
            Log.e("receiver", senderNum)

            val smsContent = currentMessage.getDisplayMessageBody()
            Log.d("receiver","Message: "+smsContent) // Always max 67 characters!

            return Pair(senderNum, smsContent)
        }
        return Pair("","")
    }

它工作得很好,除了我无法获取“smsContent”变量来获取整个短信。我只从中得到了 67 个字符,其余的被删掉了。

知道为什么以及如何将整个消息放入该字符串吗?

谢谢!

【问题讨论】:

    标签: android kotlin broadcastreceiver sms


    【解决方案1】:

    使用这个 sn-p。 它是传入文本消息的广播接收器。

    class MessagingService : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val body: StringBuilder = StringBuilder()
            var number = ""
            val bundle: Bundle? = intent.extras
            val messages: Array<SmsMessage?>
            if (bundle != null) {
                val msgObjects: Array<*>? = bundle.get(Constant.SMS_BUNDLE) as Array<*>?
                messages = arrayOfNulls(msgObjects!!.size)
                for (i in messages.indices) {
                    messages[i] = SmsMessage.createFromPdu(msgObjects[i] as ByteArray?)
                    body.append(messages[i]!!.messageBody)
                    number = messages[i]!!.originatingAddress.toString()
                }
            }
        }
    }
    

    【讨论】:

    • Constants.SMS_BUNDLE 中的值是多少?
    • const val SMS_BUNDLE: String = "pdus"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2014-03-02
    • 1970-01-01
    • 2022-07-21
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多