Gửi tin nhắn điện thoại bằng Android
Hi các bạn,
Nay mình sẽ hướng dẫn các bạn gửi tin nhắn thông qua Android (Java), cực kì đơn giản thôi.
Mình đi vào chi tiết luôn nhé
1/ Quyền để gửi tin nhắn
Để gửi được tin nhắn, ta cần cấp quyền này: android.permission.SEND_SMS
Khai báo vào AndroidManifest.xml
<uses-permission android:name="android.permission.SEND_SMS" />
Xin cấp quyền tại onCreate:
ActivityCompat.requestPermissions(context,
new String[]{Manifest.permission.SEND_SMS}
READ_SMS_PERMISSIONS_REQUEST);
(Về kiểm tra sau khi cấp quyền, cách cấp quyền cụ thể thì các bạn đợi bài post sau nhé)
2/ Gửi tin nhắn điện thoại bằng Android (cơ bản)
Rất đơn giản, 2 dòng là ta có thể gửi được tin nhắn (trực tiếp tại app, không thông qua Intent)
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
Với biến String phoneNumber là số điện thoại, và String message là nội dung tin nhắn.
Các bạn nhớ test tại device thật để gửi tin nhé (Emulator ko dc đâu :D)
3/ Gửi tin nhắn điện thoại bằng Android (nâng cao)
Nâng cao là sao? Là ta có thể track được toàn bộ state của tin nhắn khi ta gửi, như đã gửi chưa, nhận chưa, lỗi,…
Đây là full function để các bạn có thể sử dụng và tùy biến tùy thích.
private void sendSMS(String phoneNumber, final String message)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
//---when the SMS has been sent---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(SmsPageActivity.this, "SMS sent",
Toast.LENGTH_SHORT).show();
addRecord(message);
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(SmsPageActivity.this, "Generic failure",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(SmsPageActivity.this, "No service",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(SmsPageActivity.this, "Null PDU",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(SmsPageActivity.this, "Radio off",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
//---when the SMS has been delivered---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(SmsPageActivity.this, "SMS delivered",
Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(SmsPageActivity.this, "SMS not delivered",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}
4/ Note
Khi làm việc với cái này, các bạn cần lưu ý:
- Test trên device thật, có sim (kể cả điện thoại 2 sim)
- Đối với điện thoại 2 sim, nó sẽ tự chọn 1 sim để gửi (với Xiaomi Redmi 5A của mình thì nó lấy sim 2 để gửi tin)
- Cần lưu ý sim phải có tiền nhé, không thì nó sẽ ra lỗi “Generic” đó 😀
Chúc các bạn thành công!