Android学习(7)BroadcastReceiver_广播接收
BroadcastReceiver是什么:
- 广播接收者
- Android四大组件之一
- BroadcastReceiver是应用程序组件
- 唯一功能就是接收广播,并作出相应的处理
- 没有用户界面
如何使用BroadcastReceiver
- 接受收用程序发送过来的广播
- 接收系统发送的广播
1.设置布局,定义一个按钮,实现从用户界面发送广播
activity_boradcast_recriver.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btnBroRec"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送广播"/>
</LinearLayout>
2.在Activity中设置Button监听,点击按钮通过Intent发送广播到MyReceiver.java
BroadcastReceiverDemoActivity.java
public class BrodcastReceiverActivity extends AppCompatActivity {
private Button send_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast_receiver);
send_btn = (Button)findViewById(R.id.btnBroRec);
//设置按钮监听,点击按钮发送广播
send_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(BrodcastReceiverActivity.this,MyReceiver.class);
//广播包含的数据
intent.putExtra("broadcast","my frist receiver");
//发送广播
sendBroadcast(intent);
}
});
}
}
3.复写onRecetive()方法,接收Intent发送过来的广播,并打印在控制台中
MyReceiver.java
要继承BroadcstReceiver
public class MyReceiver extends BroadcastReceiver {
//复写方法,接收广播
@Override
public void onReceive(Context context, Intent intent) {
System.out.println(intent.getStringExtra("broadcast"));
}
}
控制台接收到了广播中的字符串”my first receiver”
4.通过BroadcstReceiver实现实时显示手机电量
(1)给布局文件添加一个TextView来显示电量
<TextView
android:id="@+id/tvPow"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
(2)在Activity中实例化一个receiver,获取系统电量权限并打印
public class BrodcastReceiverActivity extends AppCompatActivity {
private TextView tvPower;
//创建一个receiver对象
private BroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast_receiver);
tvPower = (TextView)findViewById(R.id.tvPow);
//实例化receiver对象
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//通过系统Intent对象得到当前电量的权限ACTION_BATTERY_CHANGED如果等于当前动态注册获取的电量权限intent.getAction(),就显示电量
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){
//系统中取到当前电量的键:level,只能是level,不能更改
int level = intent.getIntExtra("level",0);
//获取系统总电量的建:scale
int scale = intent.getIntExtra("scale",100);
tvPower.setText("电池电量:"+(level*100/scale)+"%");
}
}
};
//动态注册,书写一个获取电量的权限new IntentFilter(Intent.ACTION_BATTERY_CHANGED)
registerReceiver(receiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
//当程序退出,Activity销毁时,就取消注册,释放权限
protected void OnDestory(){
super.onDestroy();
//取消注册
unregisterReceiver(receiver);
}
}
声明:
1.知识点来源于《网易云课堂》——《Android基础视频教程》
2.本文只用于本人自身学习记录,如有侵权,请立即通知我更改或删除