发送 广播 (全局、本地)

  • 发送标准广播
  • 首先构造出一个Intent对象,并把要发送的广播的值传入,然后调用Context的sendBroadcast()方法将广播发送出去,这样,监听这样action的广播接收器就可以接受到这条广播了
    这里的action为 com.xiaoxu.broadcasttest.MY_BROADCAST
sendBradBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.xiaoxu.broadcasttest.MY_BROADCAST");
                 sendBroadcast(intent);

                 }
    });
``
此时发出的是一条标准广播
 **发送**有序广播**

sendBradBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(“com.xiaoxu.broadcasttest.MY_BROADCAST”);

            MainActivity.this.sendOrderedBroadcast(intent,null);
        }
    });

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

sendBradBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(“com.xiaoxu.broadcasttest.MY_BROADCAST”);

            MainActivity.this.sendOrderedBroadcast(intent,null);
        }
    });

发送有序广播只需要修改一行代码,**sendOrderedBroadcast(intent,null);**
第一个参数仍然是一个intent,第二个参数是一个与权限相关的修饰符,这里传null.
有序广播传递是有先后顺序的,我们可以通过设置AndroidMainfest 广播注册的属性设置优先级,
并在接收该广播的onReceive()方法,决定是否继续传递该广播。

        <intent-filter android:priority="100">
            <action android:name="com.xiaoxu.broadcasttest.MY_BROADCAST"/>

        </intent-filter>

    </receiver>

 -## 设置优先级的类型为100,表示一定会第一个接收

@Override
public void onReceive(Context context, Intent intent) {

    //接收到广播处理的事情,截断该广播
    abortBroadcast();


      }

 - 在onReceive方法中截断了该广播,表示优先级低的广播接收器将不会收到该广播。

 -  ## 使用本地广播 ##


- 1. 前面说述我们发送和接收的广播都是属于系统全局广播,即发出的广播可以被任何应用程序接收到,并且我们也可以接收到任何程序的广播,这样容易造成安全问题。
- 2.  为了解决该类问题,Android引入了本地广播机制。使用这个机制发出的广播只能在该应用程序的内部进行传递
- 3. 用法:使用了LocalBroadcastManager来对发送本地广播进行管理,并提供了发送广播和注册广播的方法。

package com.xiaoxu.administrator.myapplication3;

import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private Button sendBradBtn;
private MyBroadcast1 broadcastReceiver;
LocalBroadcastManager localBroadcast;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

//获取发送本地广播的管理类
localBroadcast = LocalBroadcastManager.getInstance(this);
broadcastReceiver = new MyBroadcast1();

    sendBradBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent("com.xiaoxu.broadcasttest.MY_BROADCAST");
              //发送本地广播
            localBroadcast.sendBroadcast(intent);

        }
    });
    IntentFilter intentFilter = new IntentFilter("com.xiaoxu.broadcasttest.MY_BROADCAST");
    //注册广播
    localBroadcast.registerReceiver(broadcastReceiver,intentFilter);

}

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

}

“`

1、 这与动态发送广播和注册广播的代码类似。只不过现在首先是通过LocalBroadcastManager的getgetInstance(content)找到它的一个实例,然后在注册广播的时候调用registerReceiver方法。
2. 还有一点,发送本地广播是无法通过静态注册来完成接收的,因为发送广播是在应用程序启动后执行的,因此也不需要静态注册广播的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值