Các tin nhắn SMS nhận được hành động chuỗi được ẩn - và do đó một API được hỗ trợ. Như vậy, nó có thể thay đổi với bất kỳ phát hành nền tảng tương lai. Nó không phải là thực hành tốt để sử dụng các API được hỗ trợ bởi vì làm như vậy mang nguy cơ đáng kể. Hãy thận trọng khi sử dụng tính năng nền tảng được hỗ trợ bởi vì họ có thể thay đổi trong phiên bản nền tảng tương lai.
Đối với một ứng dụng để lắng nghe cho SMS Broadcast Intents, nó cần phải xác định receive_sms phép biểu hiện:
android: name = "android.permission.RECEIVE_SMS"
/>
Các Ý định SMS Broadcast bao gồm các chi tiết tin nhắn SMS. Để giải nén các mảng của các đối tượng SmsMessage đóng gói trong các bó Ý định SMS Broadcast, sử dụng phím PDU để trích xuất một loạt các PDU SMS (đơn vị dữ liệu giao thức - được sử dụng để đóng gói một tin nhắn SMS và siêu dữ liệu của nó), mỗi trong số đó đại diện cho một tin nhắn SMS, từ các tính năng bổ sung Bundle. Để chuyển đổi từng mảng PDU byte vào một tin nhắn SMS đối tượng tin nhắn, gọi SmsMessage.createFromPdu, đi qua trong từng mảng byte:
bó Bundle = intent.getExtras (); if (bó = null) {
0bject [] PDU = (0bject []) bundle.get ( "PDU");
SmsMessage [] thông điệp = SmsMessage mới [pdus.length]; for (int i = 0; i <pdus.length; i ++)
thông điệp [i] = SmsMessage.createFromPdu ((byte []) PDU [i]);
}
Mỗi SmsMessage chứa các chi tiết tin nhắn SMS, bao gồm địa chỉ nguồn gốc (điện thoại num¬ber), dấu thời gian và nội dung thư, có thể được trích xuất bằng getOriginatingAddress, getTimestampMillis, và phương pháp getMessageBody, tương ứng:
public class MySMSReceiver kéo dài BroadcastReceiver {
© Override
public void onReceive (bối cảnh bối cảnh, ý định ý định) {
Bundle bó = intent.getExtras (); if (bó = null) {
0bject [] PDU = (0bject []) bundle.get ( "PDU");
SmsMessage [] thông điệp = SmsMessage mới [pdus.length]; for (int i = 0; i <pdus.length; i ++)
thông điệp [i] = SmsMessage.createFromPdu ((byte []) PDU [i]);
for (nhắn SmsMessage: tin nhắn) {
string msg = message.getMessageBody ( ); dài khi = message.getTimestampMillis ();
String từ = message.getOriginatingAddress ();
Toast.makeText (bối cảnh, từ + ":" + msg,
Toast.LENGTH_LONG) .show ();
Để nghe thông báo đến, đăng ký SMS của bạn Broadcast Receiver sử dụng một bộ lọc Ý định là lắng nghe cho các chuỗi hành động android.provider.Telephony.SMS_RECEIVED. Trong hầu hết các trường hợp, bạn sẽ muốn đăng ký này trong biểu hiện ứng dụng để đảm bảo ứng dụng của bạn luôn luôn có thể đáp ứng với tin nhắn SMS.
Mô phỏng Incoming Tin nhắn SMS trong Emulator
Hai kỹ thuật có sẵn để mô phỏng các tin nhắn SMS trong mô phỏng. Việc đầu tiên được mô tả trước đó trong phần này: bạn có thể gửi một tin nhắn SMS từ một giả lập khác bằng cách sử dụng số cổng của nó như là số điện thoại của mình.
Ngoài ra, bạn có thể sử dụng các công cụ debug Android (giới thiệu trong chương 2, "Bắt đầu") để mô phỏng các tin nhắn SMS từ số lượng tùy ý, như thể hiện trong hình 17-1.
đang được dịch, vui lòng đợi..
