Android中的BroadCast组件

(Broadcast)

1.广播Broadcast是一种广泛运用在应用程序之间用于消息传递的机制

多数的广播是由系统发起的,如地域变换,电量不足,来电来信等。

自己的程序也是可以发出一个广播的

2BroadcastReceiver类是所有的广播接收器对的基类

3消息抵达时,BroadcastReceiver调用onReceive()方法

4在该方法结束后,BroadcastReceiver实例失效

5Android系统提供了两种方法发送广播

(1)Context.sendBroadcast()发送的广播,满足条件的BroadcastReceive都会执行onReceive()方法来处理响应。

(2)Context.sendOrderedBroadcast()发送有序的广播,会根据.BroadcastReceiver注册时IntentFilter的优先级顺序来执行onReceive()方法。

优先级在<intent-filter>的android:priority中声明,也可以在代码中通过IntentFilter.setPriority中声明,也可以在代码中通过IntentFilter.setPriority()方法设置,数越大的优先级就越高。

6 Broadcast Receiver的概念

 Broadcast Receiver是一段独立的Java程序代码,需要在Android项目中注册后才可以使用(类似于Activity)

注册方法:

(1)静态注册:(8.0以后可能不大合适)

在AndroidManifest.xml中注册,在内设置过滤器,静态注册的应用程序会一直进行监听(无论是否处于活动态)

(2)动态注册:

在Java中通过Context.registerReceiver()方法来注册

在动态实现注册的类必须是 BroadcastReceiver子类。

分三步:

(1)定义一个广播

(2)定义广播接收器

(3)注册广播接收器

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <Button
        android:id="@+id/sendBroadcast"
        android:text="发送广播"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"></Button>
    <Button
        android:id="@+id/registerReceiver"
        android:text="注册接收器"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"></Button>
    <Button
        android:id="@+id/unregisterReceiver"
        android:text="取消注册广播"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"></Button>
</LinearLayout>
package com.example.broat_cast_demo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button sendBroadcast=findViewById(R.id.sendBroadcast);
        sendBroadcast.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction("sendMsg");
                intent.putExtra("msg", "我是广播");
                sendBroadcast(intent);
            }
        });
//动态注册
        myReceiver[] receiver={null};
        Button registerReceiver=findViewById(R.id.registerReceiver);
        registerReceiver.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                receiver[0]=new myReceiver();
                IntentFilter filter=new IntentFilter();
                filter.addAction("sendMsg");
                registerReceiver(receiver[0],filter);

            }
        });
//动态取消注册
        Button unregisterReceiver=findViewById(R.id.unregisterReceiver );
        unregisterReceiver.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                unregisterReceiver(receiver[0]);
            }
        });

    }
}
package com.example.broat_cast_demo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class myReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("Test","已经收到广播信息"+intent.getStringExtra("msg"));
    }
}

可以看到点击发送广播以后不会进行发送。

需要先点击注册广播,再进行发送广播才可以正常的进行

又点击取消注册后,再点击发送广播也是不可以正常使用的,所以说只有完成注册之后才可以正常的使用广播。

猜你喜欢

转载自blog.csdn.net/a15929748502/article/details/110939602
今日推荐