一、基本用法
创建一个广播接收器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package com.zhangyu.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyReceiver extends BroadcastReceiver { private static final String TAG = "MyReceiver"; public static final String ACTION = "com.zhangyu.broadcasttest.intent.action.MyReceiver"; @Override public void onReceive(Context context, Intent intent) { String key = intent.getStringExtra("key"); Log.e(TAG, "onReceive: " + key); } } |
静态注册
1 2 3 4 | <receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"></receiver> |
对于静态注册中的,发送广播
1 2 3 4 5 | private void sendBroadcast() { Intent intent = new Intent(this, MyReceiver.class); intent.putExtra("key", "zhangyu"); sendBroadcast(intent); } |
动态注册,和该情况下的发送广播
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void unregisterBroadcast() { unregisterReceiver(myReceiver); } private void registerBroadcast() { registerReceiver(myReceiver, new IntentFilter(MyReceiver.ACTION)); } private void sendBroadcast() { Intent intent = new Intent(MyReceiver.ACTION); intent.putExtra("key", "zhangyu"); sendBroadcast(intent); } |
二、跨进程通信
权限,两个程序都需要加入该权限。自定义的一个权限
1 2 | <uses-permission android:name="com.zhangyu.receivebroadcast.intent.permission.MyReceiver" /> <permission android:name="com.zhangyu.receivebroadcast.intent.permission.MyReceiver"/> |
b程序中的广播接收者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package com.zhangyu.receivebroadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; public class MyReceiver extends BroadcastReceiver { private static final String TAG = "MyReceiver"; public static final String BROADCAST_PERMISSION = "com.zhangyu.receivebroadcast.intent.permission.MyReceiver"; public static final String BROADCAST_ACTION = "com.zhangyu.receivebroadcast.intent.action.MyReceiver"; @Override public void onReceive(Context context, Intent intent) { //intent.getAction():获取发送过来的action)(从A发送过来的) if (intent.getAction().equals(BROADCAST_ACTION)) { Log.e(TAG, "onReceive: "); Toast.makeText(context, "接到一个广播!!!", Toast.LENGTH_LONG).show(); } } } |
b程序中的动态注册
1 2 3 4 5 6 7 8 9 10 | protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 注册广播接收 BroadcastReceiver receiveBroadCast = new MyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(MyReceiver.BROADCAST_ACTION); // 只有持有相同的action的接受者才能接收此广播 registerReceiver(receiveBroadCast, filter, MyReceiver.BROADCAST_PERMISSION, null); } |
a程序中的发送
1 2 3 4 5 | public void onClick(View view) { Log.e(TAG, "onClick"); Intent intent = new Intent("com.zhangyu.receivebroadcast.intent.action.MyReceiver"); sendBroadcast(intent,"com.zhangyu.receivebroadcast.intent.permission.MyReceiver"); } |
参考文献
三、获取WiFi状态
广播接收者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package com.zhangyu.wifireceivertest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.wifi.WifiManager; import android.widget.Toast; public class WifiReceiver extends BroadcastReceiver { public static String WIFI_STATE_CHANGED = WifiManager.WIFI_STATE_CHANGED_ACTION; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (WIFI_STATE_CHANGED.equals(action)) { // wifi status int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); if (wifistate == WifiManager.WIFI_STATE_ENABLED) { // sutatus on Toast.makeText(context, "wifi on", Toast.LENGTH_SHORT).show(); } else if (wifistate == WifiManager.WIFI_STATE_DISABLED) { // sutatus off Toast.makeText(context, "wifi off", Toast.LENGTH_SHORT).show(); } } } } |
动态注册
1 2 3 4 5 6 | protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); registerReceiver(new WifiReceiver(), new IntentFilter(WifiReceiver.WIFI_STATE_CHANGED)); } |