【Android】Broadcast广播

广播

四大组件之一
降低程序间的耦合,但也引发一些问题
没有用户界面
继承自BroadcastReceiver
需要在AndroidManifest.xml中注册

注册

静态注册:AndroidManifest.xml中

<receiver android:name=".TestBroadcastReceiver">
    <intent-filter>
        <action android:name="com.jsc4.aboutactivity.broadcast"/>
    </intent-filter>
</receiver>

动态注册:java中

@Override
protected void onStart() {
    
    
    super.onStart();
    // 有个intentFilter,动态注册广播
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(COM_JSC4_ABOUTACTIVITY_BROADCAST);
    registerReceiver(mTestBroadcastReceiver, intentFilter);
}

实现

SendBroadcastActivity.java:

package com.jsc4.aboutactivity;

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

import androidx.annotation.Nullable;

public class SendBroadcastActivity extends Activity {
    
    

    public static final String COM_JSC4_ABOUTACTIVITY_BROADCAST = "com.jsc4.aboutactivity.broadcast";
    private TestBroadcastReceiver mTestBroadcastReceiver = new TestBroadcastReceiver();//接收者
    private Button mSend_broadcast_button;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_broadcast);

        mSend_broadcast_button = findViewById(R.id.send_broadcast_button);
        mSend_broadcast_button.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                Intent intent = new Intent();
                intent.setAction(COM_JSC4_ABOUTACTIVITY_BROADCAST);
                intent.putExtra("toast", "this is my toast of broadcast");
                sendBroadcast(intent);
            }
        });

    }

    @Override
    protected void onStart() {
    
    
        super.onStart();
        // 有个intentFilter,动态注册广播
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(COM_JSC4_ABOUTACTIVITY_BROADCAST);
        registerReceiver(mTestBroadcastReceiver, intentFilter);
    }

    @Override
    protected void onStop() {
    
    
        super.onStop();
        // 反注册
        unregisterReceiver(mTestBroadcastReceiver);
    }
}

相应的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/send_broadcast_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

接受者:

package com.jsc4.aboutactivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.widget.Toast;

public class TestBroadcastReceiver extends BroadcastReceiver {
    
    
    @Override
    public void onReceive(Context context, Intent intent) {
    
    

        // 接收广播,处理信息
        if (intent != null) {
    
    
            if (TextUtils.equals(intent.getAction(), SendBroadcastActivity.COM_JSC4_ABOUTACTIVITY_BROADCAST)) {
    
    
                //收到了该消息
                String toastString = intent.getStringExtra("toast");
                Toast.makeText(context, toastString, Toast.LENGTH_SHORT).show();
            }
        }
    }
}

广播种类

Nomal broadcast
ordered broadcast
local broadcast

BroadcastReceiver的生命周期

Register 注册
SendBroadcast 发送广播
onReceive 接收
unRegister 取消注册

猜你喜欢

转载自blog.csdn.net/qq_30885821/article/details/108837547