Broadcast Receiver Trong Android

 

1. Giới thiệu về Broadcast Receiver trong Android

Broadcast Receiver là một trong các thành phần chính của android các bạn có thể hiểu nó như một bộ thu các bản tin cần thiết cho apps. Các bản tin được thu ở đây chính là các intent. Các bạn có thể thu các Intent sẵn có của hệ điều hành ví dụ như: tin nhắn đến, cuộc gọi đến, trạng thái của điện thoại, trạng thái của pin… Ngoài ra các bạn cũng có thể thu Intent của chính các bạn gửi ra để làm một nhiệm vụ gì đó (có thể dùng để start service khi cần).

2. Demo ứng dụng nhận tin nhắn

Để các bạn có thể hiểu về Broadcast Receiver mình làm một app đơn giản có chức năng thu các tin nhắn đến, khi có tin nhắn đến mình sẽ log số điện thoại và nội dung tin nhắn đến. Ngoài ra mình còn tạo một buton để send một Intent và tự thu intent đó bằng receiver.

B1. Tạo project mới

B2. Cấp quyền nhận tin nhắn trong AndroidMainifest

B3. Thiết kế giao diện

B4. Xử lý code trong MainActivity.java

package

devpro

.

com

.

broadcastreceiverdemo

;

import

android

.

content

.

BroadcastReceiver

;

import

android

.

content

.

Context

;

import

android

.

content

.

Intent

;

import

android

.

content

.

IntentFilter

;

import

android

.

os

.

Bundle

;

import

android

.

support

.

design

.

widget

.

FloatingActionButton

;

import

android

.

support

.

design

.

widget

.

Snackbar

;

import

android

.

support

.

v7

.

app

.

AppCompatActivity

;

import

android

.

support

.

v7

.

widget

.

Toolbar

;

import

android

.

telephony

.

SmsMessage

;

import

android

.

view

.

View

;

import

android

.

view

.

Menu

;

import

android

.

view

.

MenuItem

;

import

android

.

widget

.

TextView

;

import

android

.

widget

.

Toast

;

public

class

MainActivity

extends

AppCompatActivity

{

BroadcastReceiver receiver

=

null

;

protected

void

onCreate

(

Bundle savedInstanceState

)

{

super

.

onCreate

(

savedInstanceState

)

;

setContentView

(

R

.

layout

.

activity_main

)

;

Toolbar toolbar

=

(

Toolbar

)

findViewById

(

R

.

id

.

toolbar

)

;

setSupportActionBar

(

toolbar

)

;

IntentFilter filter

=

new

IntentFilter

(

"android.provider.Telephony.SMS_RECEIVED"

)

;

receiver

=

new

BroadcastReceiver

(

)

{

@Override

public

void

onReceive

(

Context context

,

Intent intent

)

{

processReceive

(

context

,

intent

)

;

}

}

;

registerReceiver

(

receiver

,

filter

)

;

}

protected

void

onDestroy

(

)

{

super

.

onDestroy

(

)

;

unregisterReceiver

(

receiver

)

;

}

public

void

processReceive

(

Context context

,

Intent intent

)

{

Toast

.

makeText

(

context

,

"Có 1 tin nhắn mới"

,

Toast

.

LENGTH_LONG

)

.

show

(

)

;

TextView txtContent

=

(

TextView

)

findViewById

(

R

.

id

.

txtContent

)

;

String sms_extra

=

"pdus"

;

Bundle bundle

=

intent

.

getExtras

(

)

;

Object

[

]

objArr

=

(

Object

[

]

)

bundle

.

get

(

sms_extra

)

;

String sms

=

""

;

for

(

int

i

=

0

;

i

<

objArr

.

length

;

i

++

)

{

SmsMessage smsMsg

=

SmsMessage

.

createFromPdu

(

(

byte

[

]

)

objArr

[

i

]

)

;

String body

=

smsMsg

.

getMessageBody

(

)

;

String address

=

smsMsg

.

getDisplayOriginatingAddress

(

)

;

sms

+=

address

+

": "

+

body

+

" "

;

}

txtContent

.

setText

(

sms

)

;

}

public

boolean

onCreateOptionsMenu

(

Menu menu

)

{

getMenuInflater

(

)

.

inflate

(

R

.

menu

.

menu_main

,

menu

)

;

return

true

;

}

public

boolean

onOptionsItemSelected

(

MenuItem item

)

{

int

id

=

item

.

getItemId

(

)

;

if

(

id

==

R

.

id

.

action_settings

)

{

return

true

;

}

return

super

.

onOptionsItemSelected

(

item

)

;

}

}