[Android] Broadcast

broadcast

One of the four major components to
reduce the coupling between programs, but it also causes some problems.
No user interface.
Inherited from BroadcastReceiver and
needs to be registered in AndroidManifest.xml

registered

Static registration: in AndroidManifest.xml

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

Dynamic registration: java

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

achieve

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

The corresponding 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>

recipient:

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

Broadcast type

Nomal broadcast
ordered broadcast
local broadcast

Life cycle of BroadcastReceiver

Register Register
SendBroadcast Send broadcast
onReceive Receive
unRegister Unregister

Guess you like

Origin blog.csdn.net/qq_30885821/article/details/108837547