1min了解广播(3)-发送自定义广播

今天我们一起来学习一下如何在应用程序中发生自定义的广播,前面已经介绍过了,广播主要分为两种类型,标准广播和有序广播,在本节中我们就将通过实践的方式来看下这两种广播具体的区别。

发送标准广播
在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发出去也是白发。因此新建一个MyBroadcastReceiver 继承自BroadcastReceiver,代码如下所示:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * Created by 权兴权意 on 2016/9/27.
 */

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

这里当MyBroadcastReceiver 收到自定义的广播时,就会弹出Received in MyBroadcastReceiver的提示。然后在AndroidManifest.xml 中对这个广播接收器进行注册:

        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="com.quan.car.mybroadcast.MY_BROADCAST"/>
            </intent-filter>
        </receiver>


可以看到, 这里让MyBroadcastReceiver 接收一条值为com.quan.car.broadcasttest.MY_BROADCAST 的广播,因此待会儿在发送广播的时候,我们就需要发出这样的一条广播。
接下来修改activity_main.xml 中的代码,添加一个Button按钮作为发送广播的触发点,如下所示:

    <Button
        android:id="@+id/mybr_btn_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="MyBroadcastReceiver"
        />


然后修改MainActivity中的代码,如下所示:
        mybr_btn_main = (Button) findViewById(R.id.mybr_btn_main);
        mybr_btn_main.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendBroadcast(new Intent("com.quan.car.mybroadcast.MY_BROADCAST"));
            }
        });

可以看到,我们在按钮的点击事件里面加入了发送自定义广播的逻辑。首先构建出了一个Intent 对象,并把要发送的广播的值传入,然后调用了Context 的sendBroadcast()方法将广播发送出去,这样所有监听MY_BROADCAST 这条广播的广播接收器就会收到消息。此时发出去的广播就是一条标准广播。

运行程序点击Button即可看到效果:


广播是一种可以跨进程的通信方式,这一点从前面接收系统广播的时候就可以看出来了。因此在我们应用程序内发出的广播,其他的应用程序应该也是可以收到的。


发送有序广播

不过到目前为止,程序里发出的都还是标准广播,我们还可以尝试一下发送有序广播。

发送有序广播只需要改动一行代码, 即将sendBroadcast() 方法改成sendOrderedBroadcast()方法。sendOrderedBroadcast()方法接收两个参数,第一个参数仍然是Intent,第二个参数是一个与权限相关的字符串,这里传入null 就行了。

这个时候的广播接收器是有先后顺序的,而且前面的广播接收器还可以将广播截断,以阻止其继续传播。
那么该如何设定广播接收器的先后顺序呢?当然是在注册的时候进行设定的了,修改AndroidManifest.xml 中的代码,如下所示:

android:priority="100"

我们通过android:priority 属性给广播接收器设置了优先级,优先级比较高的广播接收器就可以先收到广播。

既然已经获得了接收广播的优先权,那么就可以选择是否允许广播继续传递了。如果在onReceive()方法中调用了abortBroadcast()方法,就表示将这条广播截断,后面的广播接收器将无法再接收到这条广播。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义el-popover的样式,可以通过设置全局样式或者通过popper-class绑定自定义类名popperOptions来实现。 全局样式的设置可以在App.vue文件中添加以下样式: ```css .el-popover { position: absolute; background: rgba(22, 38, 94, 1) !important; min-width: 73%; width: 100%; border: 0 solid #EBEEF5; padding: 12px; z-index: 2000; margin-right: 55px; color: white; line-height: 1.4; text-align: justify; font-size: 14px; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1); word-break: break-all; } .el-popper[x-placement^=top .popper__arrow::after { bottom: -0.2px; margin-left: -6px; border-top-color: rgba(22, 38, 94, 1) !important; } ``` 另外,你也可以在el-popover组件中使用popper-class属性来绑定自定义类名popperOptions。例如: ```html <el-popover width="300" trigger="hover" popper-class="popperOptions" placement="top-start"> <div class="operate-btn" slot="reference"> <el-badge :value="12" class="item"> <i class="icon el-icon-chat-line-round"></i> </el-badge> </div> <span slot="default">你有99条未读消息,请及查看</span> </el-popover> ``` 然后,在样式的根文件中,添加popperOptions类名的样式规则: ```css .popperOptions[x-placement^=left .popper__arrow::after { border-left-color: #EA4E3D; } .popperOptions[x-placement^=right .popper__arrow::after { border-right-color: #EA4E3D; } .popperOptions[x-placement^=bottom .popper__arrow::after { border-bottom-color: #EA4E3D; } .popperOptions[x-placement^=top .popper__arrow::after { border-top-color: #EA4E3D; } .popperOptions { background-color: #EA4E3D; color: #FFFFFF; font-size: 18px; padding: 5px; border: #EA4E3D; } ``` 这样就可以根据自己的需求来自定义el-popover的样式了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [el-popover修改样式](https://blog.csdn.net/sinat_42888557/article/details/98631586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [el-popover 样式修改](https://blog.csdn.net/weixin_44980864/article/details/119774065)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值