How can I read SMS messages from the device programmatically in Android?

后端 未结 11 2589
情深已故
情深已故 2020-11-22 02:48

I want to retrieve the SMS messages from the device and display them?

11条回答
  •  天命终不由人
    2020-11-22 03:15

    Kotlin Code to read SMS :

    1- Add this permission to AndroidManifest.xml :

        
    

    2-Create a BroadCastreceiver Class :

    package utils.broadcastreceivers
    
    import android.content.BroadcastReceiver
    import android.content.Context
    import android.content.Intent
    import android.telephony.SmsMessage
    import android.util.Log
    
    class MySMSBroadCastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        var body = ""
        val bundle = intent?.extras
        val pdusArr = bundle!!.get("pdus") as Array
        var messages: Array  = arrayOfNulls(pdusArr.size)
    
     // if SMSis Long and contain more than 1 Message we'll read all of them
        for (i in pdusArr.indices) {
            messages[i] = SmsMessage.createFromPdu(pdusArr[i] as ByteArray)
        }
          var MobileNumber: String? = messages[0]?.originatingAddress
           Log.i(TAG, "MobileNumber =$MobileNumber")         
           val bodyText = StringBuilder()
            for (i in messages.indices) {
                bodyText.append(messages[i]?.messageBody)
            }
            body = bodyText.toString()
            if (body.isNotEmpty()){
           // Do something, save SMS in DB or variable , static object or .... 
                           Log.i("Inside Receiver :" , "body =$body")
            }
        }
     }
    

    3-Get SMS Permission if Android 6 and above:

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && 
        ActivityCompat.checkSelfPermission(context!!,
                Manifest.permission.RECEIVE_SMS
            ) != PackageManager.PERMISSION_GRANTED
        ) { // Needs permission
    
                requestPermissions(arrayOf(Manifest.permission.RECEIVE_SMS),
                PERMISSIONS_REQUEST_READ_SMS
            )
    
        } else { // Permission has already been granted
    
        }
    

    4- Add this request code to Activity or fragment :

     companion object {
        const val PERMISSIONS_REQUEST_READ_SMS = 100
       }
    

    5- Override Check permisstion Request result fun :

     override fun onRequestPermissionsResult(
        requestCode: Int, permissions: Array,
        grantResults: IntArray
    ) {
        when (requestCode) {
    
            PERMISSIONS_REQUEST_READ_SMS -> {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.i("BroadCastReceiver", "PERMISSIONS_REQUEST_READ_SMS Granted")
                } else {
                    //  toast("Permission must be granted  ")
                }
            }
        }
    }
    

提交回复
热议问题