android BroadcastReceiver 广播

本文详细介绍了Android中无序广播的实现方式,包括如何创建发送者、接收者,并通过实例展示了具体的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BroadcastReceiver 广播

先分析一下 什么是广播  类似于学校的广播器  有人发送,也有人接收。也可能是一对一,一对多。

广播也有专属于它的频段。你也可以不接受这一个 ,选择其他的广播。


那么android里面也有广播,


什么是广播?

Android四大组件之一;

一种全局的监听器,用于监听系统全局的广播消息

系统大部分都以广播形式发布,比如开机启动完成的消息,收到短信的消息,打进打出电话得到消息

ex::Android系统每次启动会向外广播一条信息,告诉所有人完成了,只有继承自Broadcast的类能捕捉到这些系统消息,捕捉到信息该干嘛就干嘛。

说这么多  给大家一张思维导图看一看就知道了


然后给大家广播中的无序广播

我先新建了3个Moudle来实现


首先 必须有个发送者 和接收者

发送者


android_sender  这是发送者  其他两个是接受者 

里面的activity_main.xml  里面我就定义了两个控件  


 <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/et_main_content"
        android:hint="请输入"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送"
        android:onClick="send"
        />

然后来到Mainactivity.java文件  


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private EditText et_main_content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_main_content = (EditText) findViewById(R.id.et_main_content);

    }

    public void send(View view){
        String content=et_main_content.getText().toString();

        //发送广播
        //两种类型广播
        //有序广播  无序广播
        Intent intent=new Intent();
        //指定广播的名字
        intent.setAction("com.example.android_sender.Hug");
        //指定广播内容
        intent.putExtra("content",content);
//        //发送无序广播
//        sendBroadcast(intent);


        //发送无序黏性广播
        sendStickyBroadcast(intent);


然后一个发送者就完成了

这里 注意  我们要发送一个黏性广播  就要定义黏性广播的权限

那么在AndroidManifest.xml 里面加上这句权限

    <!--黏性广播权限-->
    <uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>
就在<manifest></manifest>
包括的内容里面

上面那张图 给大家解释了 什么叫做黏性广播  大家可以自己去看



好 那么下面写接受者

首先是android_receiver01  这个使用黏性主播接受

先定义一个MyReceiver01  继承BroadcastReceiver


public class MyReceiver01 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        //获取广播的名字
        String action=intent.getAction();
        if ("com.example.android_sender.Hug".equals(action)){
            //获取广播内容
            String content=intent.getStringExtra("content");
            Log.i("test","广播接受者一号:"+content);
        }
    }
}


好 然后去MainActivity.java里面

import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private MyReceiver01 myReceiver01;
    private IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReceiver01 = new MyReceiver01();
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.android_sender.Hug");
    }

    @Override
    protected void onResume() {
        super.onResume();
        //注册广播
        registerReceiver(myReceiver01,intentFilter);
    }

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

好  一个黏性的广播 就写完了


当然还要去AndroidManifest.xml去注册  这是我的 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android_receiver01">

    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true" android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!--注册:广播接受者
  动态注册:使用java代码配置
  静态注册:在XML文件中配置
  -->

    <receiver android:name=".MyReceiver01">
        <intent-filter>
            <action android:name="com.example.android_sender.Hug"></action>

        </intent-filter>

    </receiver>

    </application>

</manifest>


上面我只用了打印   各位有需求 就自己再去改变  都有注释



还有\android_receiver_02

同样也需要定义一个MyReceiver02.java

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

/**
 * Created by admin on 2017/7/11.
 */

public class MyReceiver02 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        //获取广播的名字
        String action=intent.getAction();
        if("com.example.android_sender.Hug".equals(action)){
            //获取广播内容
            String content=intent.getStringExtra("content");
            Log.i("test","广播接受者2号:"+content);
        }
    }
}

然后 二号一个普通接受者就可以了



看运行结果  我用了夜神模拟器







这就是今天的无序广播 接受没有顺序的  下次给大家带来有序的广播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值