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)
;
}
}