动态注册监听网络变化
MainActivity的代码
public class MainActivity extends ActionBarActivity { private IntentFilter intentFilter; private NetWorkChangeReceive netWorkChangeReceive; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); netWorkChangeReceive = new NetWorkChangeReceive(); registerReceiver(netWorkChangeReceive, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(netWorkChangeReceive); } }receiver的代码,记得加上获取网络状态的全选
public class NetWorkChangeReceive extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Toast.makeText(context,"Network changes",Toast.LENGTH_SHORT).show(); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if(networkInfo!=null&&networkInfo.isAvailable()){ Toast.makeText(context,"network is available",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(context,"network is unavailable",Toast.LENGTH_SHORT).show(); } } }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />静态注册监听开机启动
public class BootCompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"Boot Complete",Toast.LENGTH_SHORT).show(); } }权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />注册receiver
<receiver android:name=".receiver.BootCompleteReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
发送自定义广播,点击按钮发送,receiver接收,弹出吐司
findViewById(R.id.btn_send_broadcast).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.beibei.broadcastTest.MY_BROADCAST"); sendBroadcast(intent); } });
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"receive in MyBroadcastReceiver",Toast.LENGTH_SHORT).show(); } }
<receiver android:name=".receiver.MyBroadcastReceiver"> <intent-filter> <action android:name="com.beibei.broadcastTest.MY_BROADCAST" /> </intent-filter> </receiver>其他的应用程序也能接收到我们程序发出的广播,
发送有序广播,只需改一行代码
sendBroadcast(intent);
改为 sendOrderedBroadcast(intent,null);
那广播的顺序呢,通过intent-filter下 android:priority = "100" 获取到最高优先级,确保先接收到
先接收到可以做一些处理,比如拦截了广播
abortBroadcast();
本地广播
public class LocalSend extends Activity { private LocalBroadcastManager localBroadcastManager; private LocalReceiver localReceiver; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loacl_send); localBroadcastManager = LocalBroadcastManager.getInstance(this); findViewById(R.id.btn_send_broadcast).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.beibei.intent.sendlocalbroadcasttxt"); localBroadcastManager.sendBroadcast(intent); } }); localReceiver = new LocalReceiver(); intentFilter = new IntentFilter("com.beibei.intent.sendlocalbroadcasttxt"); localBroadcastManager.registerReceiver(localReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver(localReceiver); } }
public class LocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"receive from localbroadcast",Toast.LENGTH_SHORT).show(); } }记得注册改为主activity