Airplane Mode trong Android OS
17/06/2014
FacebookTwitterDeliciousStumbleuponDiggMyspaceLinkedInZingmegovnlinkhay


Airplane Mode trong Android OS có thể xem như chủ đề dành cho những lập trình viên Android mới làm quen với lập trình hệ thống. Bài viết này sẽ hướng dẫn các bạn từng bước giải quyết việc xây dựng một activity cho phép bật tắt chế độ airplane. Ngoài ra phần cuối sẽ bổ sung một số thông tin điều chỉnh từ Google trong các phiên bản mới.

Thiết lập quyền

Để có thể điều khiển airplane mode, ứng dụng cần quyền truy cập settings hệ thống, vì thế ta thêm dòng lệnh sau vào AndroidManifest.xml (thiếu dòng này ứng dụng sẽ bị force close khi chạy).

Airplane Mode trong Android OS -1

Tạo giao diện cho ứng dụng

Bạn có nhiều lựa chọn giao diện phù hợp với đầu bài, trường hợp đơn giản nhất là sử dụng điều khiển Switch, ngoài ra có thể dùng ToggleButton hoặc các một kiểu nào đó mà bạn thích.

Airplane Mode trong Android OS -2

Trong ví dụ này tôi sử dụng Switch, chú ý rằng Switch chỉ có từ API 14 (Android 4.0) trở lên, vì thế nếu muốn thử ứng dụng với các máy có Android OS thấp hơn hãy chuyển sang sử dụng các điều khiển khác, tôi lựa chọn Switch hoàn toàn vì sở thích. Hình bên thể hiện giao diện của ứng dụng khi bật và tắt airplane mode, chúng ta có thể thấy kí hiệu máy bay trên phần thanh trạng thái của Android OS hoàn toàn khớp với trạng thái của Switch.

Đoạn XML dưới đây thể hiện các thuộc tính của Switch khi đặt trên activity chính của ứng dụng, như vậy ta sẽ triển khai phương thức btnSwitch để xử lý khi người sử dụng chuyển trạng thái của Switch.

Airplane Mode trong Android OS -3

Viết mã cho activity

Toàn bộ mã phần xử lý activity, để hiểu rõ hãy đọc những dòng ghi chú giải thích ngay trong đoạn mã.

Airplane Mode trong Android OS -4

Airplane Mode trong Android OS -5

Airplane Mode và những thay đổi từ Android 4.2.2

Từ phiên bản 4.2.2, Google thay đổi chính sách bảo mật, trong đó chỉ những ứng dụng thuộc loại system mới có thể thay đổi giá trị thuộc settings (các ứng dụng loại thường vẫn có thể đọc những giá trị này), nếu bạn dịch đoạn mã trên với API 17 trở lên sẽ có thông báo hằng " Settings.System.AIRPLANE_MODE_ON" bị deprecated, hằng số này được thay bằng "Settings.Global.AIRPLANE_MODE_ON". Bạn có thể tham khảo thêm về class mới tại Reference of Settings.Global

Vậy vẫn muốn thay đổi airplane mode thì sẽ làm thế nào? Có một vài phương án sau bạn có thể lựa chọn:

1. Cài đặt ứng dụng của bạn như là system app. Trường hợp này thiết bị cần phải được root, apk sẽ được cài vào /system/app và bạn cần thêm quyền " android.permission.WRITE_SECURE_SETTINGS " vào AndroidManifest.xml

2. Sử dụng reflection để gọi trực tiếp api của Android. Cách này rủi ro vì có thể api bị thay đổi trong các phiên bản sau, ta cũng không biết rõ thực sự api này thực hiện những gì và như vậy đã thực hiện đủ các công việc cần thiết hay chưa

3. Thay vì trực tiếp thay đổi, gọi setting activity mặc định của hệ thống để người dùng tự thay đổi. Đoạn mã dưới đây sẽ giúp gọi activity mặc định:

Airplane Mode trong Android OS -6

Đây là giải pháp an toàn nhất, ngoài ra bạn không cần bất kì quyền gì đặc biệt (kể cả quyền "android.permission.WRITE_SETTINGS" được đề cập ở phần đầu). Chú ý rằng một số phiên bản được tùy biến bởi nhà sản xuất có thể không có activity này.

Theo Tác giả Trương Xuân Nam txnam.net