Thông tin tài liệu:
Nối tiếp phần 1, "Bài giảng Phát triển ứng dụng cho các thiết bị di động: Phần 2" tiếp tục trình bày những nội dung về lập trình ứng dụng android nâng cao; audio, video, và sử dụng camera; sensors phần cứng; phát triển ứng dụng đa nền tảng; giới thiệu các khung làm việc (Framework) phát triển ứng dụng đa nền tảng; xây dựng một ứng dụng đa nền tảng sử dụng một Framework;... Mời các bạn cùng tham khảo!
Nội dung trích xuất từ tài liệu:
Bài giảng Phát triển ứng dụng cho các thiết bị di động: Phần 2
BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Bài giảng:
PHÁT TRIỂN ỨNG DỤNG CHO CÁC
THIẾT BỊ DI ĐỘNG
Biên soạn: Th.S. Nguyễn Hoàng Anh
2019
10
CHƯƠNG 3: LẬP TRÌNH ỨNG DỤNG ANDROID NÂNG CAO
3.1. MESSAGING VÀ NETWORKING
3.1.1. SMS Messaging
SMS (Short Messaging Service) là công nghệ gửi tin nhắn ngắn giữa các điện thoại
di động. Tin nhắn ngắn tồn tại dưới 2 dạng: dạng văn bản người dùng đọc được và dạng
dữ liệu (như dạng nhị phân) dùng để truyền tín hiệu trao đổi giữa các ứng dụng. Android
cung cấp 1 tập API SMS hỗ trợ lập trình chức năng nhắn tin ngắn.
Có 2 cách cho phép gửi tin nhắn từ ứng dụng Android: 1/ Bằng cách sử dụng Intent,
ứng dụng xây dựng sẽ gọi ứng dụng nhắn tin có sẵn trên điện thoại ; 2/ Bằng cách sử
dụng lớp SmsManager do Android cung cấp để quản lý việc gửi nhận tin nhắn ngay
trong chính ứng dụng xây dựng.
Gửi tin nhắn SMS thông qua ứng dụng nhắn tin có sẵn trên điện thoại
Sử dụng phương thức startActivity() với tham số truyền vào là đối tượng Intent có
hành vi Intent.ACTION_SENDTO để gọi ứng dụng nhắn tin có sẵn trên điện thoại từ
ứng dụng xây dựng như sau:
Intent smsIntent = new Intent(Intent.ACTION_SENDTO,
Uri.parse('sms:55512345'));
smsIntent.putExtra('sms_body', 'Press send to send me');
startActivity(smsIntent);
Trong đó: dữ liệu Intent đặc tả số điện thoại nhận tin dưới dạng sms:schema và nội
dung tin nhắn gửi đi “Press send to send me” được gán cho sms_body.
Gửi tin nhắn trong chính ứng dụng
• Cấp quyền SEND_SMS cho phép gửi tin nhắn ngay trong ứng dụng, trong
AndroidManifest.xml như sau:
• Tạo đối tượng SmsManager để xử lý việc gửi nhận tin nhắn:
SmsManager smsManager = SmsManager.getDefault();
• Cài đặt lệnh gửi tin nhắn SMS trong chính ứng dụng:
Gửi tin nhắn văn bản:
Phương thức sendTextMessages() của SmsManager cho phép gửi tin nhắn SMS,
phương thức này gồm 5 tham số:
- destinationAddress: Số điện thoại nhận tin.
- scAddress: Địa chỉ trung tâm dịch vụ tin nhắn(SMSC), giá trị này bằng
null cho biết ứng dụng sử dụng dịch vụ mặc địch của SMSC.
- text: Nội dung tin nhắn.
- sentIntent: tham số Pending intent thứ nhất cho biết trạng thái gửi tin từ
133
bên gửi.
- deliveryIntent: tham số Pending intent thứ 2 cho biết trạng thái nhận tin
nhắn bởi bên nhận.
String sendTo = '5551234';
String myMessage = 'Android supports programmatic SMS messaging!';
smsManager.sendTextMessage(sendTo, null, myMessage, null, null);
Gửi tin nhắn dữ liệu dạng nhị phân
Sử dụng sendDataMessage() của SmsManager cho phép gửi dữ liệu dạng nhị phân.
Phương thức này có tham số truyền vào tương tự như phương thức sendTextMessage()
nêu trên, đồng thời bổ sung 2 tham số: cổng lắng nghe kết nối dữ liệu (destination port)
và 1 mảng byte chứa các dữ liệu nhị phân.
Giám sát trạng thái gửi tin nhắn từ bên gửi tới bên nhận
Để giám sát trạng thái tin nhắn gửi đi cần đăng kí Broadcast Receivers lắng nghe
các sự kiện với giá trị đặc tả được truyền vào tham số Pending Intents của phương thức
sendTextMessage().
Tham số Pending Intent đầu tiên cho biết trạng thái tin nhắn gửi đi từ bên gửi là
thành công hay thất bại thông qua 1 trong các mã đặc tả sau:
- Activity.RESULT_OK: cho biết tin nhắn gửi thành công.
- SmsManager.RESULT_ERROR_GENERIC_FAILURE: cho biết quá
trình truyền tin nhắn lỗi.
- SmsManager.RESULT_ERROR_RADIO_OFF: cho biết tin nhắn
không truyền đi do không có kết nối mạng.
- SmsManager.RESULT_ERROR_NULL_PDU: lỗi PDU (protocol
description unit).
- SmsManager.RESULT_ERROR_NO_SERVICE: cho biết dịch vụ
mạng hiện thời không sẵn sàng.
Tham số Pending Intent thứ 2 cho biết trạng thái tin nhắn gửi đến bên nhận là thành
công hay thất bại thông qua 1 trong 2 đặc tả sau:
- Activity.RESULT_OK: cho biết bên nhận đã nhận được tin nhắn.
- Activity.RESULT_CANCELED: cho biết bên nhận không nhận được
tin nhắn.
Việc cài đặt lệnh giám sát trạng thái gửi tin nhắn từ bên gửi tới bên nhận được thực
hiện như sau:
String SENT_SMS_ACTION = 'com.paad.smssnippets.SENT_SMS_ACTION';
String DELIVERED_SMS_ACTION = 'com.paad.smssnippets.DELIVERED_SMS_ACTION';
// Create the sentIntent parameter
Intent sentIntent = new Intent(SENT_SMS_ACTION);
PendingIntent sentPI = PendingIntent.getBroadcast(getApplicationContext(),
0,
sentIntent,
PendingIntent.FLAG_UPDATE_CURRENT)
;
134
// Create the deliveryIntent parameter
Intent deliveryIntent = new Intent(DELIVERED_SMS_ACTION);
PendingIntent deliverPI =
PendingIntent.getBroadcast(getApplicationContext(),
0,
deliveryIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
//--- Register the BroadcastReceiver when the SMS is sent---
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context _context, Intent _intent)
{
String resultText = 'UNKNOWN';
switch (getResultCode()) {
case Activity.RESULT_OK:
resultText = 'Transmission successful'; break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
resultText = 'Transmission failed'; break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
resultText = 'Transmission faile ...