美文网首页AndroidWayAndroid开发经验谈程序员
说说在 Android 中如何发送自定义广播

说说在 Android 中如何发送自定义广播

作者: deniro | 来源:发表于2018-03-01 16:12 被阅读2330次

    1 发送标准广播

    先新建一个广播接收器用于来接收自定义的广播:

    public class MyReceiver extends BroadcastReceiver {
        public MyReceiver() {
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context,"接收到自定义的广播",Toast.LENGTH_SHORT).show();
        }
    }
    

    然后修改 AndroidManifest.xml 文件,注册要监听的自定义广播(假设是 net.deniro.android.MY_BROADCAST):

    <receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="net.deniro.android.MY_BROADCAST"/>
        </intent-filter>
    
    </receiver>
    

    接着在主布局文件中,添加一个按钮作为发送广播的触发点:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="net.deniro.android.mybroadcastreceiver.MainActivity">
    
        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="发送广播"></Button>
    </RelativeLayout>
    
    

    最后修改主活动的代码:

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    sendBroadcast(new Intent("net.deniro.android.MY_BROADCAST"));
    
                }
            });
        }
    }
    

    这里通过 sendBroadcast() 方法来发送广播,这样所有监听这个广播的接收器就会收到消息。

    接收到自定义广播

    2 发送有序广播

    广播是一种可以跨进程进行通信的方式,因此我们在应用程序中发出的广播,其他的应用程序也可以收到。

    我们新建一个项目,然后再自定义一个广播接收器:

    public class AnotherReceiver extends BroadcastReceiver {
        public AnotherReceiver() {
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context,"接收到自定义的广播(AnotherReceiver)",Toast.LENGTH_SHORT).show();
    
        }
    }
    

    代码与之前的接收器代码类似,只是弹出的消息内容不同。

    接着在 AndroidManifest.xml 文件中为接收器注册要监听的消息:

    <receiver
        android:name=".AnotherReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="net.deniro.android.MY_BROADCAST" />
        </intent-filter>
    </receiver>
    

    最后把这个项目安装到模拟器上,然后重新回到上一个项目 app,点击【发送广播】按钮,这时就会弹两次提示信息。

    新的程序接收到广播消息

    现在我们试试发送有序广播。 回到前面的项目,修改 Activity 中的代码:

    sendOrderedBroadcast((new Intent("net.deniro.android.MY_BROADCAST")),null);
    

    sendOrderedBroadcast() 方法接收两个参数,第一个是 Intent,第二个是与权限相关的字符串,这里我们传入 null。

    通过 AndroidManifest.xml 文件中的 android:priority,可以设定广播接收器的先后顺序,我们为第一个接收器设定 android:priority

    <receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter android:priority="100">
            <action android:name="net.deniro.android.MY_BROADCAST" />
        </intent-filter>
    
    </receiver>
    

    android:priority 的值越大,优先级就越高。

    调用 abortBroadcast() 方法,就可以截断这条广播啦。

    相关文章

      网友评论

        本文标题:说说在 Android 中如何发送自定义广播

        本文链接:https://www.haomeiwen.com/subject/mdngxftx.html