Android学习(7)BroadcastReceiver_广播消息接收

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>

01

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”
02

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.本文只用于本人自身学习记录,如有侵权,请立即通知我更改或删除

猜你喜欢

转载自blog.csdn.net/qq_40740256/article/details/82466870