/ Lập Trình Android

Competition trong lập trình Mobile thể hiện như thế nào?

Bạn đã biết competition trong lập trình Mobile thể hiện như thế nào? Itexpress.edu.vn sẽ hướng dẫn cách thực hiện bài học này.

Competition trong lập trình Mobile

Mình sẽ lấy các ví dụ và cách giải quyết bài toán trong bài hoc lap trinh Android kỳ trước để giải thích khái niệm này.

Vì trong một bài viết không thể nói hết được một vấn đề lớn của lập trình mobile nên mình chỉ mong có thể giải thích khái niệm và cơ chế hoạt động chứ không quá đi sâu chi tiết về coding.

TH1 : Các bạn đang nghe nhạc thì có một cuộc gọi đến. Nhạc sẽ tắt để bạn có thể trả lời cuộc gọi. Sau khi cuộc gọi kết thúc nhạc sẽ lại tự động được bật lên.

Trong tình huống này ứng dụng nghe nhạc đã phải tạm dừng để ưu tiên cho ứng dụng gọi điện được hoạt động. Khi kết thúc cuộc gọi thì ứng dụng nghe nhạc sẽ lại được hoạt động trở lại. Điều này không phải do hệ thống tự xử lý mà được xử lý trong ứng dụng nghe nhạc. Nếu bạn muốn tạo ra ứng dụng nghe nhạc của riêng mình thì đây là một điều cần chú ý nếu không người dùng sẽ vừa phải nghe nhạc và vừa nghe điện thoại J

Tương tự với các game, nếu bạn đang chơi game mà có cuộc gọi đến thì game của bạn sẽ phải tạm dừng, sau khi kết thúc cuộc gọi màn hình chơi game sẽ được hiện ra với một menu có nút resume để bạn chơi tiếp.

TH2: Khi các bạn vào ứng dụng contact, chọn call tới một contact các bạn sẽ thấy một danh sách các ứng dụng hiện ra (Call, Viber, Skype, …) bạn phải chọn một trong các ứng dụng để call. Tương tự với các trường hơp bạn mở môt SMS hay Mail mới. Tại sạo như vậy?

TH3: Bạn đang lượn lờ Facebook bằng điên thoại và ra khỏi khu vực có wifi. Ứng dụng Facebook sẽ thông báo “No Internet Connection’ để thông báo với bạn rằng mobile của bạn không còn kết nối với wifi nữa. Bạn sẽ ko view thêm được bất kì comment hoặc message nào nữa. Tại sao ứng dụng Facebook lại biết được khi nào mobile của bạn không còn kết nối với wifi?

TH4: Bạn đang xem một quảng cáo sản phẩm trong một ứng dụng. Bạn thích sản phẩm này và muốn liên hệ với cửa hàng đặt mua. Bạn click vào số điện thoại của cửa hàng bên dưới sản phẩm. Và thế là mobile của bạn calling đến số điện thoại đó. Và ‘a lô, xin chào bạn đến với cửa hàng….’. Tại sao ứng dụng quảng cáo sản phẩm lại có thể gọi ra ứng dụng call như vậy.

Để giải quyết tất cả các trường hợp cạnh tranh này Android đã đưa ra một khái niệm Broadcast Receiver.

TH1: Ứng dụng nghe nhạc sẽ phải đăng kí một receiver để lắng nghe sự kiện incoming call và end call.

1
2
3
4
5
<receiver android:name=".PlayerReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

Xử lí khi bắt được sự kiện incoming call va end call trong class PlayerReceiver

1
2
3
4
5
6
7
8
9
10
11
public void onReceive(Context context, Intent intent) {
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
        //Phone is ringing à Stop service play media
    }else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK){
        //Call received
    }else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
        //Call Dropped or rejected à Restart service play media
    }
}

TH2: Khi các bạn vào ứng dụng contact, chọn call tới một contact các bạn sẽ thấy một danh sách các ứng dụng hiện ra (Call, Viber, Skype, …) bởi vì tất cả các ứng dụng trên đều đăng kí nhận sự kiện outgoing call của hệ thống. Vì vậy khi bạn chọn call tới một số nào đó trong contact thì cả 3 ứng dụng này đều có nhận được message outgoing call và tất cả đều có thể start để thực thi cuộc gọi. Lúc này hệ thống sẽ đưa ra danh sách các ứng dụng trên cho người dùng lựa chọn. Nếu úng dụng của bạn đăng kí nhận sự kiện ACTION_NEW_OUTGOING_CALL thì nó cũng được hiện thị trong danh sách ứng dụng trên cùng với Call, Viber, Skype,…

TH3: Ứng dụng Facebook đã đăng kí nhận sự kiện WIFI_STATE_CHANGED vì vậy khi Wifi bị tắt hoặc device đi ra khỏi khu vực có wifi thì ứng dụng sẽ nhận được sự kiện này và hiển thị thông báo “No Internet Connection”.

TH4: Bạn click vào số điện thoại của cửa hàng bên dưới sản phẩm. Và thế là mobile của bạn calling đến số điện thoại đó. Lúc này ứng dụng của bạn sẽ gửi đến hệ thống (broadcaster) một message với action là ACTION_CALL. Hệ thống (broadcaster) sẽ gửi message này tới các ứng dụng. Ứng dụng nào đăng kí xử lí message này thì sẽ được mớ. Trong trường hợp này ứng dụng call sẽ được start. Và người dùng có thể gọi đến số điện thoại ghi trên quảng cáo. Thật là đơn giản phải không. Tương tự như vậy bạn có thể gọi ra các ứng dụng khác như SMS, Browser, …có sẵn trên thiết bị.

Bạn cũng có thể tự định nghĩa ra các sự kiện của riêng mình và gửi chúng đến các ứng dụng khác có trên thiết bị hay chính các ứng dụng khác của bạn. Tôi có thể gợi ý cho các bạn một ví dụ sau.

Bạn có 2 ứng dụng đọc sách và từ điển. Trong ứng dụng đọc sách có thể gửi message do bạn đinh nghĩa ra tới hệ thống (Broadcaster). Hệ thống sẽ gửi message này tới tất cả các ứng dụng nhưng chi có duy nhất ứng dụng từ điển của bạn đăng kí nhận xử lí message này. Và thế là ứng dụng từ điển của bạn được mở khi bạn đang đọc sách.

Với hướng dẫn chi tiết như trên, bạn sẽ thể hiện Competition trong lập trình Mobile dễ dàng. Chúc bạn thực hiện thành công.