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. 还有一点,发送本地广播是无法通过静态注册来完成接收的,因为发送广播是在应用程序启动后执行的,因此也不需要静态注册广播的功能。