[Android] อ่าน sms ที่ถูกส่งมายังเครื่อง
สวัสดีผู้อ่านทุกคนครับบล็อกนี้ก็เป็นบล็อกแรกของผู้เขียนเองซึ่งบล็อกแรกของผู้เขียนวันนี้ผู้เขียนก็จะเสนอวิธีการอ่าน SMS ใน android ของเรากัน
การอ่าน sms บนแอพมีประโยชน์อย่างไรผู้อ่านบางคนอาจจะยังไม่รู้ผู้เขียนขอยกตัวอย่างละกันเช่น ผู้อ่านได้สมัคครสมาชิกแอพพลิเคชั่นไลน์แล้วทางแอพได้ส่ง SMS OTP มาให้ผู้เขียนแล้วให้แอพอ่านแล้วใส่รห้ส OTP ให้เราเองเลย
เอาละ.. เรามาทำกัน..!!
ในวันนี้ผู้เขียนจะเสนอวิธีการอ่านข้อมูลที่เป็น SMS เท่านั้นไม่ได้มาสอนดึง OTP จาก SMS ที่ส่งมา เอาละ...
ก่อนอื่นเราก็ไปให้ สิทธิการเข้าถึง ขอแอพเราก่อน
<uses-permission android:name="android.permission.RECEIVE_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 อาเรย์ไปเรื่อยๆ แบบนี้
โค้ดคลิก
สวัสดี........
ความคิดเห็น
แสดงความคิดเห็น