一种是进程间,注册广播的方式一般有两种
分类:美高梅网上注册平台

在《第四章 Android 四大应用组件》中,简单介绍了下四大组件的成员,属性,生命周期等。这里主要是介绍下Android中的广播机制。在四大组件中,Activity的使用频率是最高的。其他三个组件的使用频率相对叫低,但是既然叫四大组件,那就说明了他们的不可或缺性。 记得小时候上学的时候的大喇叭吗?有时候听力考试也会用到,学校的广播室通过发送广播到各个教室的小喇叭上,每次一开,那简直是要命啊 。类似于喇叭的工作机制,在现在的计算机领域会有很广泛的引用。为了便于系统级别的消息通知,Android也引入了广播消息机制。当然相应的比较那个大喇叭例子,Android的广播机制更加灵活。

Broadcast(广播)是Android四大组件之一,正如其名,就像一个广播喇叭一样,起着进程间,或进程内部传递消息的作用。

一、BroadCastReceiver简介

BroadcastReceiver是Android四大组件之一,本质是一种全局的监听器,用于监听系统或者应用全局的广播消息,然后根据广播信息做出相应的逻辑处理,也可以用来传输少量、频率低的数据。因此它可以非常方便的实现不同组件之间的通信。
  Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者。从实现原理看上,Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型。具体实现流程要点粗略概括如下:

  1. 广播接收者BroadcastReceiver通过Binder机制向AMS(Activity Manager Service)进行注册;
  2. 广播发送者通过binder机制向AMS发送广播;
  3. AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
  4. 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。

为什么说Android的广播机制灵活呢?我们知道在我们的手机上有很多个应用,有时候会接收到不同的应用的消息,但是,既然是大喇叭,发过来的消息,不是都可以接受么?这里简单讲一下它的灵活之处,Android中的每个应用程序都可以对自己感兴趣的广播注册,这样该程序就只能接收到自己关心的广播内容。这些广播的内容可以是来自于系统,也可以是来自其他应用程序。 我们所使用的手机,既可以说是一个广播接收器,也可以说是一个广播发送器。Android 的广播分为两个方面:广播发送者和广播接收者。BroadCast Receiver指的是广播接受者。在一些系统的广播的使用场景:电量低弹窗,开机,锁屏等。常见的广播使用场景有下面几种:1.同一app内部的同一组件内的消息通信(单个或多个线程之间)2.同一app内部的不同组件之间的消息通信;3.同一app具有多个进程的不同组件之间的消息通信;4.不同app之间的组件之间消息通信;5.Android系统在特定情况下与App之间的消息通信。

BroadcastReceiver(广播接收器)有两种生成方式,静态注册和动态注册,静态注册就是在xml中注册,动态注册就是在activity中注册,

二、接收系统广播

注册广播的方式一般有两种,一种是在代码中注册,另一种是在AndroidManifest.xml中注册,其中前者也被称为动态注册,后者也被称为静态注册。

我们先通过网络状态变化这一系统广播来实践一下BroadCastReceiver的动态注册。

首先,我们需要在AndroidManifest文件中申请网络访问权限。

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

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    ... ...

</manifest>

新建NetworkChangeReceiver继承自BroadCastReceiver,重写onReceive()方法。

public class NetworkChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 获取手机所有连接管理对象
        ConnectivityManager connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        // 获取NetworkInfo对象
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isAvailable()) {
            Toast.makeText(context, "Network is available!", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "Network is unavailable!", Toast.LENGTH_SHORT).show();
        }
    }
}

首先通过getSystemService() 方法得到了系统服务类ConnectivityManager的实例,专门用于管理网络连接的。然后调用它的getActiveNetworkInfo()方法可以得到NetworkInfo的实例,接着调用NetworkInfo的isAvailable()方法,就可以判断出当前是否有网络连接了。

在MainActivity的onCreate()方法中注册该广播,在onDestroy()方法中注销该广播。

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;

    private NetworkChangeReceiver networkChangeReceiver;

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

        // 设置对应的intent启动条件为网络状态发生变换
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

        networkChangeReceiver = new NetworkChangeReceiver();
        // 注册广播
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 注销广播
        unregisterReceiver(networkChangeReceiver);
    }
}

我们创建了一个IntentFilter的实例,并给它添加了一个action,因为当网络状态发生变化时,系统发出的正是一条值为"android.net.conn.CONNECTIVITY_CHANGE"的广播,也就是说我们的广播接收器想要监听什么广播,就在这里添加相应的action进行筛选。接下来创建了一个NetworkChangeReceiver的实例,然后调用registerReceiver()方法进行注册,将NetworkChangeReceiver的实例和IntentFilter的实例都传了进去,这样NetworkChangeReceiver就会收到所有值为android.net.conn.CONNECTIVITY_CHANGE的广播,也就实现了监听网络变化的功能。

运行程序,使用下拉通知栏更改网络连接状态,我们会发现以下现象,证明我们接收到了系统发出的广播。

美高梅网上注册平台 1

image.png

美高梅网上注册平台 2

image.png

现在我们实践一下广播的静态注册,首先新建一个BootCompleteReceiver,Android Studio右键new中的other可以自动创建broadcastReceiver,这样Android Studio就已经帮我们在Manifest文件中静态注册了BootCompleteReceiver。重写onReceive()方法,弹出Toast

public class BootCompleteReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Boot Complete", Toast.LENGTH_SHORT).show();
    }
}

修改AndroidManifest.xml文件,添加监听系统开机广播的权限,并且在receiver中添加对应的action。这样手机重启的时候,该应用就会收到来自系统发出的广播而响应onReceive()。

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

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application

        ... ...

        <receiver
            android:name=".broadcastReceiver.BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

之所以叫做广播,就是因为它只管"说"至于"听不听",那就不管了。另外广播的另一个特点是,它可以被不止一个程序接收,也可以不被任何程序接收。广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的。Android中广播的是操作系统中产生的各种各样的事件。例如,收到一条短信就会产生一个收到短信息的事件。而Android操作系统一旦内部产生了这些事件,就会向所有的广播接收器对象来广播这些事件。

BroadcastReceiver有两种范围,一种是进程间,如android很多内置的系统级广播,可以在系统的各个位置任意时段接受,另一种是本地广播,只能作用于某一个应用程序内部,一般我们用这种即可,以免导致一些不必要的凌乱。

三、发送自定义广播

新建一个广播接收器来接受此广播,新建一个MyBroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();
    }
}

修改AndroidManifest文件,让MyBroadcastReceiver接收到“com.kingdee.broadcasttest.MY_BROADCAST”时响应。

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

    ... ...

    <application

        ... ...

        <receiver
            android:name=".broadcastReceiver.MyBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.kingdee.broadcasttest.MY_BROADCAST"/>
            </intent-filter>
        </receiver>

    </application>

</manifest>

为Activity添加一个Button来发送自定义的广播信号。先在xml文件中添加button,然后再MainActivity中注册监听事件,调用sendBroadcast(intent)来发送广播。

public class MainActivity extends AppCompatActivity {

    ... ...

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

        ... ...

        Button sendBtn = findViewById(R.id.btn_send);
        sendBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.kingdee.broadcasttest.MY_BROADCAST");
                sendBroadcast(intent);

            }
        });
    }

    ... ...

}

运行程序,点击button会发现弹出了Toast,说明我们在button的点击事件中发出的自定义广播已经被接收到,并执行了onReceive()方法。

美高梅网上注册平台 3

image.png

广播是一种可以跨进程的通信方式,这一点从前面接收系统广播的时候就可以看出来了。因此在我们应用程序内自定义发出的广播,其他的应用程序应该也是可以收到的。我们可以再新建一个BroadcastTest2项目,在这个项目下定义一个广播接收器,用于接收第一个项目中发出中的自定义广播。

public class AnotherBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received in AnotherBroadcastReceiver", Toast.LENGTH_SHORT).show();
    }
}

同样在Manifest文件中设置广播接收器的响应信号。

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

    <application

        ... ...

        <receiver
            android:name=".broadcastReceiver.AnotherBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.kingdee.broadcasttest.MY_BROADCAST" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

运行程序,点击BroadCastReceiverTest的button,我们会发现弹出了两次Toast,说明广播被跨进程接收了。

接下来我们让广播的发送有序化。修改BroadCastReceiverTest中发送广播的方式为sendOrderedBroadcast()。

public class MainActivity extends AppCompatActivity {

    ... ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        ... ...

        Button sendBtn = findViewById(R.id.btn_send);
        sendBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.kingdee.broadcasttest.MY_BROADCAST");
                sendOrderedBroadcast(intent, null);

            }
        });
    }

    ... ...

}

在AndroidManifest文件中设置MyBroadcastReceiver广播的优先级为100(高于AnotherBroadcasrReceiver)

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

    ... ...

    <application

        ... ...

        <receiver
            android:name=".broadcastReceiver.MyBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter
                android:priority="100">
                <action android:name="com.kingdee.broadcasttest.MY_BROADCAST"/>
            </intent-filter>
        </receiver>

    </application>

</manifest>

修改MyBroadcastReceiver的代码,在onReceive()的时候调用abortBroadcast()去截断广播。

public class MyBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();
        abortBroadcast();
    }
}

再次运行程序,点击button,我们会发现只有MyBroadcastReceiver接收到了广播并弹出了Toast,AnotherBroadcastReceiver没有接收到,因为被前一个广播接收器截断了。

1.标准广播标准关闭时一种完全一步执行的广播,假设有很多个广播接收器,当广播发出去的时候,所有的接收器,同时接收到广播消息。接收器之间没有任何先后顺序。这种广播的频率比较高,这也意味着它无法被截断。标准广播的工作流程如下图所示:

BroadcastReceiver有两个类别,一个标准广播,速度快,所有接收器几乎同时接收而没有顺序。另一种是有序广播,可以有序的接收,并拦截。

四、使用本地广播

全局广播可以被各个应用程序接收处理,本地广播则只在本应用内部传递,增加了广播的安全性。本地广播使用LocalBroadcastManager来管理广播,广播的发送和接收都通过LocalBroadcastManager来进行。因此,也本地广播无法在AndroidManifest中注册。

修改MainActivity的代码:

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;

//    private NetworkChangeReceiver networkChangeReceiver;

    private LocalReceiver localReceiver;

    private LocalBroadcastManager localBroadcastManager;

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

        // 获取实例
        localBroadcastManager = LocalBroadcastManager.getInstance(this);

//        // 设置对应的intent启动条件为网络状态发生变换
//        intentFilter = new IntentFilter();
//        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
//
//        networkChangeReceiver = new NetworkChangeReceiver();
//        // 注册广播
//        registerReceiver(networkChangeReceiver, intentFilter);

        Button sendBtn = findViewById(R.id.btn_send);
        sendBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.kingdee.broadcasttest.LOCAL_BROADCAST");
                // 发送本地广播
                localBroadcastManager.sendBroadcast(intent);
            }
        });

        // 设置对应的intent对应的条件过滤器
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.kingdee.broadcasttest.LOCAL_BROADCAST");

        // 注册本地广播监听器
        localReceiver = new LocalReceiver();
        localBroadcastManager.registerReceiver(localReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 注销本地广播
        localBroadcastManager.unregisterReceiver(localReceiver);
    }
}

这基本上就和我们前面所学的动态注册广播接收器以及发送广播的代码是一样的。只不过现在首先是通过LocalBroadcastManager的getInstance() 方法得到了它的一个实例,然后在注册广播接收器的时候调用的是LocalBroadcastManager的registerReceiver() 方法,在发送广播的时候调用的是LocalBroadcastManager的sendBroadcast()方法,仅此而已。这里我们在按钮的点击事件里面发出了一条com.example.broadcasttest.LOCAL_BROADCAST广播,然后在LocalReceiver里去接收这条广播。重新运行程序,点击Button,我们接收到了本地广播。

美高梅网上注册平台 4

image.png

美高梅网上注册平台 5标准广播

下面我们分类探讨一下。

2.有序广播这是一种同步执行的广播,广播接收器有先后之分,同一时刻只有一个接收器能够接收广播,而且,当优先级靠前的接收器没有接收到广播的时候,优先级靠后的接收器就无法接收到广播了。而且优先级高的广播还能截断广播。有序广播的工作流程如下图所示:

在接收广播前,很显然要先生成一条广播:

美高梅网上注册平台 6有序广播

IntentFilter mIntentFilter = new IntentFilter();

1.静态注册 静态注册方式是在AndroidManifest.xml的application里面定义receiver并设置要接收的action。如果在清单配置文件中配置了广播接收器,那么程序在安装后会自动注册广播接收器。静态注册方式的特点:不管该应用程序是否处于活动状态,都会进行监听。程序即便未启用,也可以接收广播。实现静态注册的步骤:1.创建一个类BootBroadCastReceiver继承BroadcastReceiver类,通过Android Studio创建,可以通过File->New->Other->Broadcast Receiver 这样的快捷方式创建广播接收器,AndroidManifest.xml文件会自动注册。有一个<receiver> 标签对。在onReceiver()中的方法很简单,Toast一个就好了

mIntentFilter.addAction(“android.net.conn.CONNECTIVITY_CHANGE”);

public class BootBroadCastReceiver extends BroadcastReceiver { private static final String TAG = "BootBroadCastReceiver"; @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "启动Broadcast", Toast.LENGTH_SHORT).show(); }}

registerReceiver(mReceiver,mIntent);

2.因为我们是需要接收广播信息,所以需要权限RECEIVE_BOOT_COMPLETED。由于Android在启动的时候会发出一条值为android.intent.action.BOOT_COMPLETED的广播,所以 在<receiver>标签对里面添加相应的activity.

这里新建了一个IntentFilter,addAction接收的参数就是具体要监听的广播,紧接着注册这个接收器。

<manifest xmlns:andro package="com.demo.broadcastreceiverdemo"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <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> <receiver android:name=".BootBroadCastReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application></manifest>

在这个Activity的onDestroy()方法中:

3.重启模拟器,程序就可以接到开机广播了。

unregisterReceiver(mReceiver);

美高梅网上注册平台 7静态注册

销毁接收器

2.动态注册动态注册也叫做代码注册,不需要在AndroidManifest.xml中注册。而是在activity里面调用上下文对象的registerReceiver() 方法来注册。和静态的内容差不多。一个形参是receiver对象,另一个是IntentFilter对象。而IntentFilter构造方法的参数是要接收的action。动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听。实现动态注册的步骤,监听网络状态:1.创建一个类MyReceiver继承BroadCast Receiver类,重写父类的onReceiver()方法,这样当网络发生变化的时候,onReceiver的方法就会得到执行。

在这里新建一个类并继承BroadcastReceiver(广播接收器),并重写onReceiver()方法

 class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "网络连接状态发生改变", Toast.LENGTH_SHORT).show(); } }

classNetworkChangeReceiverextendsBroadcastReceiver{

2.在onCreate()方法中创建一个MyReceiver实例,并创建一个IntentFilter的过滤器,指定action,因为当网络状态发生改变的时候,系统会发送android . net . conn . CONNECTIVITY _CHANGE这样的广播。如果想调用别的关闭可以使用相应的action。最后在调用registerReceiver()方法,将myReceiver和intentFilter的实例传进去,这样就完成了注册。

@Override

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyReceiver myReceiver = new MyReceiver(); //创建过滤器,并制定action,使之用于接收同action的广播 IntentFilter intentFilter=new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); //注册广播接收器 registerReceiver(myReceiver,intentFilter); }

 //创建过滤器的第二种写法 IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

public voidonReceive(Context context,Intent intent) {

3.最后在onDestory()的方法中调用 unregisterReceiver(),销毁广播,释放内存

Toast.美高梅网上注册平台 ,makeText(context,"network

 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myReceiver); }

changes",Toast.LENGTH_SHORT).show();

4.因为Android 系统为了保护用户设备的隐私,所以对于一些相对于用户来说的敏感权限需要在配置AndroidManifest.xml文件中添加权限声明。

}

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

}

因为我们知道我们所适应的实际既是广播接收器,也是广播发送器。如果只能接,不能发,那就和收音机没啥区别了。前面已经介绍了,广播主要分为两种类型:标准广播和有序广播。这里介绍一下自定义的广播,相信你看完之后会很兴奋的,你可以定制你的Style了。

这里在activity中写了一个内部类,继承BroadcastReceiver,在onReceive()方法中写具体逻辑,这里只打印一个吐司。

3.3.1 发送标准广播

在思考发送广播之前,我们需要有一个接收器,这样发出去的东西,才能知道它到底有没有被接收到。否则只管发了,发了有没有结果不知道,这就做了无用功了。注册的方式,就选择静态注册,因为我们是自定义的广播,所以,系统启动的时候,不会直接发送广播。具体步骤:1.创建一个类MyBroadCastReceiver继承 BroadcastReceiver。这里就提示性的弹窗。

public class MyBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "快给我发过来啊,广播", Toast.LENGTH_SHORT).show(); }}

2.在Androidmanifest.xml文件中,修改receiver标签,添加需要发送的广播。

 <receiver android:name=".myStyle.MyBroadCastReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.demo.broadcastreceiverdemo.MY_BROADCAST" /> </intent-filter> </receiver>

这里需要说明一下,我们在action标签里面添加了一个com.demo.broadcastreceiverdemo. MY_BROADCAST的广播。因此待会发送广播的时候,我们就需要发送这样的广播。然后在receiver里面接收同样的广播标签。特别说明一下,格式是全包名+自定义。要不然会报错。你可以试试。3.修改activity_main2.xml文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" > <Button android: android:layout_width="150dp" android:layout_height="50dp" android:text="发送广播"/></LinearLayout>

4.发送广播

public class Main2Activity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Button button=  findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent("com.demo.broadcastreceiverdemo.MY_BROADCAST"); sendBroadcast; } }); }}

我们把按钮的点击事件加入发送自定义广播。首先构建Intent对象,然后把要发送的广播传入,然后调用Context的sendBroadCast()的方法,这样所有监听com.demo.broadcastreceiverdemo. MY_BROADCAST的接收器就会接收到这条广播信息。运行效果如图所示:

美高梅网上注册平台 8自定义标准广播

这是一个简单的小例子,我们通过在MainActivity中通过触发点击事件,来发送广播,并且自定义接收器,接收广播。

注意,这里实际上就是一个动态的在activity中注册一个广播接收器。

本文由美高梅网上注册平台发布于美高梅网上注册平台,转载请注明出处:一种是进程间,注册广播的方式一般有两种

上一篇:【美高梅网上注册平台】1、一个精简的库,因为 下一篇:项目原则是降低给别人造成麻烦,对数据量和效
猜你喜欢
热门排行
精彩图文