I cant quite seem to get the values from Broadcast Receiver to textviews in Main Activity.
In Android (KOTLIN) I managed to create a broadcast receiver that gets the phoneNumber and text Message in a Toast Event When an SMS message is received.
In main activity, I also have a button that when clicked calls #133# to check my Airtime Balance.
smsReceive Class code;
package com.example.demmo
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Build
import android.telephony.SmsMessage
import android.widget.Toast
import android.app.Activity
class SmsReceiver : BroadcastReceiver(){
var activity : Activity? = null
override fun onReceive(context: Context, intent: Intent) {
val extras = intent.extras
if(extras != null){
val sms = extras.get("pdus") as Array<Any>
for(i in sms.indices) {
val format = extras.getString("format")
var smsMessage = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
SmsMessage.createFromPdu(sms[i] as ByteArray, format)
} else {
SmsMessage.createFromPdu(sms[i] as ByteArray)
}
val phoneNumber = smsMessage.originatingAddress
val messageText = smsMessage.messageBody.toString()
Toast.makeText(context, "From: $phoneNumber Message: $messageText", Toast.LENGTH_LONG).show()
}
}
}
}
MainActivity.kt code
package com.example.demmo
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.app.ActivityCompat
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private val requestReceiveSms = 2
val balance = "*144%23"
val REQUEST_PHONE_CALL = 1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS)
!= PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECEIVE_SMS), requestReceiveSms)
}
btnBalance.setOnClickListener {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CALL_PHONE), REQUEST_PHONE_CALL)
} else{
balance()
}
}
}
@SuppressLint("MissingPermission")
private fun balance() {
val callIntent = Intent(Intent.ACTION_CALL)
callIntent.data = (Uri.parse("tel:" + balance))
startActivity(callIntent)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
if(requestCode == REQUEST_PHONE_CALL)balance
}
}
I would like some code after ' Toast.makeText(context, "From: $phoneNumber Message: $messageText", Toast.LENGTH_LONG).show()' to put the values phoneNumber and textmessage to TextViews txtPhone and txtSMS respectively and 'Click' or call phoneNumber programtically.