У меня есть получатель для входящих 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>
и у меня есть функция onReceive внутри класса .WakeupReceiver: 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 символов из него, остальное вырезано.
Есть идеи, как и как передать все сообщение в эту строку?
Спасибо!