[Android] อ่าน sms ที่ถูกส่งมายังเครื่อง

     สวัสดีผู้อ่านทุกคนครับบล็อกนี้ก็เป็นบล็อกแรกของผู้เขียนเองซึ่งบล็อกแรกของผู้เขียนวันนี้ผู้เขียนก็จะเสนอวิธีการอ่าน SMS ใน android ของเรากัน


     การอ่าน sms บนแอพมีประโยชน์อย่างไรผู้อ่านบางคนอาจจะยังไม่รู้ผู้เขียนขอยกตัวอย่างละกันเช่น ผู้อ่านได้สมัคครสมาชิกแอพพลิเคชั่นไลน์แล้วทางแอพได้ส่ง SMS OTP มาให้ผู้เขียนแล้วให้แอพอ่านแล้วใส่รห้ส OTP ให้เราเองเลย


เอาละ.. เรามาทำกัน..!!


    ในวันนี้ผู้เขียนจะเสนอวิธีการอ่านข้อมูลที่เป็น SMS เท่านั้นไม่ได้มาสอนดึง OTP จาก SMS ที่ส่งมา เอาละ...


ก่อนอื่นเราก็ไปให้ สิทธิการเข้าถึง ขอแอพเราก่อน

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

ต่อมาให้เราเขียนโค้ดนิด ๆ หน่อย ๆ เพื่อขอ permission จากผู้ใช้


val per = Manifest.permission.READ_PHONE_STATEval geund = ContextCompat.checkSelfPermission(this, per)
if (geund != PackageManager.PERMISSION_GRANTED) {
    val str = arrayOfNulls<String>(1)
    str[0] = per
    ActivityCompat.requestPermissions(this, str, 1)
}

เห็นมัยไม่ยากเลยต่อมาเราก็มาลุยกันต่อ

ให้ผู้อ่านสร้าง class ขึ้นมาใหม่ที่สืบทอดมาจาก BroadcastReceiver แบบนี้เลย..


class SmsServer : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {

    }
}


ต่อมาให้ผู้อ่านเขียนโค้ดตามนี้เลย..


override fun onReceive(context: Context?, intent: Intent?) {
    val bundle = intent?.extras    val pdus = bundle!!["pdus"] as Array<*>
    val sms = arrayOfNulls<SmsMessage>(pdus.size)
    val ff = bundle.getString("format")
    sms[0] =  SmsMessage.createFromPdu(pdus[0] as ByteArray,ff)
    Toast.makeText(context,sms[0]!!.messageBody,Toast.LENGTH_LONG).show()
    
}

ต่อมาเราก็มาเรียกใช้งาน Service ที่เราสร้างขึ้น


val intentFilter = IntentFilter()
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED")
registerReceiver(smsServer,intentFilter)


แค่นี้ก็เสร็จแล้ว..

แต่เดียวก่อน sms ที่ถูก android ดึงมาจะถูกแยกเป็นอาเรย์ 1 อาเรย์จามีเพียงแค่ 160 ตัวอักษร ซึ่งถ้า sms มีความยาวเกินจะถูกแบงเป็น 2 3 4 อาเรย์ไปเรื่อยๆ แบบนี้

โค้ดคลิก


สวัสดี........

ความคิดเห็น