示例: 监听网络变化
权限申请
在onCreate方法中:初始化绑定
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
mNetworkchange = new NetworkChangeReceiver();
registerReceiver(mNetworkchange,mIntentFilter);
接收者:
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netWorkInfo = connectionManager.getActiveNetworkInfo();
if (netWorkInfo != null && netWorkInfo.isAvailable()){
Toast.makeText(context, "network able", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "network enable", Toast.LENGTH_SHORT).show();
}
}
}
在onCreate方法中:初始化绑定
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
mNetworkchange = new NetworkChangeReceiver();
registerReceiver(mNetworkchange,mIntentFilter);
接收器:
public class BootCompleteReceiver extends BroadcastReceiver {
public BootCompleteReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Boot complete", Toast.LENGTH_SHORT).show();
Log.e("chenxh","Boot ");
}
}
设置触发点击 Intent隐式发送:
Intent intent = new Intent("com.study.test.testapplication.receiver.MY");
sendBroadcast(intent,null);
当多个广播,需要按照顺序传递信息时,需要在清单文件中,表明字段priority值
<receiver
android:name=".receiver.AnthorBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="com.study.test.testapplication.receiver.MY"/>
intent-filter>
receiver>
发送时,使用sendOrderedBroadcast方法:
sendOrderedBroadcast(intent,null);
如果需要截取到某个广播,可以使用abortBroadcast方法
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received in AnthorBroadcastReceiver", Toast.LENGTH_SHORT).show();
Log.e("chenxh","AnthorBroadcastReceiver");
abortBroadcast();
}
完整上代码:
package com.study.test.testapplication.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import com.study.test.testapplication.R;
/**
* 1:静态注册 监听网络变化
* 2:发送自定义标准广播 BootCompleteReceiver(需要在AndroidManifest.xml配置)
* 3:发送有序广播 优先级:priority 拦截广播:abortBroadcast();
*
* 安全的
* 4:使用本地广播:
* 有接接收者、广播管理器、过滤器,管理器绑定接收者 过滤器,
*
*
*
*/
public class BroadCastActivity extends AppCompatActivity {
private IntentFilter mIntentFilter;
// 4 本地广播
private LocalBroadcastManager mLocalBroadcastManager;
private LocalReceiver mLocalReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broad_cast);
// 本地广播管理器
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
// 过滤器
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("com.local.dsy");
// 广播接收者
mLocalReceiver = new LocalReceiver();
// 广播并添加过滤器
mLocalBroadcastManager.registerReceiver(mLocalReceiver,mIntentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
mLocalBroadcastManager.unregisterReceiver(mLocalReceiver);
}
public void sendBroad(View view) {
switch (view.getId()){
case R.id.send_diy_btn:
Intent intent = new Intent("com.local.dsy");
mLocalBroadcastManager.sendBroadcast(intent);
break;
}
}
// 接收者
class LocalReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "YES my love lady", Toast.LENGTH_SHORT).show();
}
}
}