Explanation and examples of BroadcastReceiver (broadcasting)

What is broadcasting:

Broadcasting is one of the four major components of Android. The full name is BroadcastReceiver.
Broadcasting is divided into receivers and senders. Even if there is no receiver, the sender will send data.
It can realize data communication across multiple pages.
It can realize data communication across processes.

Static registration out-of-order broadcast:

Realization effect: realize data communication between two software

1. Create a new custom class to inherit BroadcastReceiver and override onReceive()
public class MyBroadcastReceiver  extends BroadcastReceiver {

    private  String TAG = "MyBroadcastReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        //Toast支付宝
        Toast.makeText(context,"支付宝",Toast.LENGTH_SHORT).show();
        Log.e(TAG, "onReceive: "+"支付宝在此" );

    }
}
2. Modify the registration in the Manifest
 //添加receive标签
        <receiver android:name=".entity.MyBroadcastReceiver">
            //添加启动方式
            <intent-filter >
                //添加action标签,启动时只有相同的action才能启动广播
                <action android:name="zhifubao"></action>
            </intent-filter>
        </receiver>
send broadcast in another software
public class MainActivity extends AppCompatActivity {

    private Button button;

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

        button = findViewById(R.id.send_broadcast);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建intent对象,传入action
                Intent intent = new Intent("zhifubao");
                //发送广播
                sendBroadcast(intent);
                //sendOrderedBroadcast(intent,null);
            }
        });
    }
}

over

Dynamically register out-of-order broadcasts:

Realization effect: realize the data communication between the two software, the effect is the same, no pictures are loaded, but the dynamic registration broadcast, the two processes are running, the communication can be realized.

That is, the information registered in Manifest is implemented using Java code, and no modification is made elsewhere.

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private MyBroadcastReceiver myBroadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建intentFilter对象,用于添加action
        intentFilter = new IntentFilter();
        intentFilter.addAction("zhifubao");
        //intentFilter.setPriority(1000);
        //创建MyBroadcastReceiver的对象
        myBroadcastReceiver = new MyBroadcastReceiver();
        //注册广播
        registerReceiver(myBroadcastReceiver, intentFilter);


    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销注册
        unregisterReceiver(myBroadcastReceiver);
    }


}

over

Static registration ordered broadcast:

Achieved effect: Toast Alipay and Meituan successively


1. One more step than registering static unordered broadcast: Add priority attribute to Manifest, set priority, -1000-1000 priority gradually becomes larger

<receiver android:name=".entity.MyBroadcastReceiver">
            //添加启动方式
            <intent-filter android:priority="1000">
                //添加action标签,启动时只有相同的action才能启动广播
                <action android:name="zhifubao"></action>
            </intent-filter>
        </receiver>
2. Create a new project and copy the above code, but priority=”-1000”, also implement the broadcast function, the Toast value is Meituan

over

Dynamic registration of ordered broadcasts

The effect is the same as static registration

Code

The information registered in the Manifest is implemented using Java code

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private MyBroadcastReceiver myBroadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建intentFilter对象,用于添加action
        intentFilter = new IntentFilter();
        intentFilter.addAction("zhifubao");
        //设置优先级
        intentFilter.setPriority(1000);
        //创建MyBroadcastReceiver的对象
        myBroadcastReceiver = new MyBroadcastReceiver();
        //注册广播
        registerReceiver(myBroadcastReceiver, intentFilter);


    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销注册
        unregisterReceiver(myBroadcastReceiver);
    }


}

over

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325533339&siteId=291194637