静态广播示例:

1、在配置文件里面注册广播接收器:

<receiver android:name=".comm.ConnectivityChangeBroadcastReceiver">            <intent-filter>                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />            </intent-filter></receiver>


2、在广播接收器里处理广播:

public class ConnectivityChangeBroadcastReceiver extends BroadcastReceiver {    private static final String TAG = "ConnectivityChangeBroadcastReceiver";        @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();        if (isNetworkConnected(context)) {            Toast.makeText(context, "网络连通了", Toast.LENGTH_SHORT).show();        }    }    public boolean isNetworkConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();            if (mNetworkInfo != null) {                return true;            }        }        return false;    }}


动态广播示例:

/** * 显示wifi信号强度组件 *  * @author 夏于冲 *  */public class SystemInfoView extends LinearLayout {    private WifiUtil wifiUtil;    private final String RSSI_CHANGED_ACTION = "android.net.wifi.RSSI_CHANGED";    private final String WIRED_ON_ACTION = "android.settings.WIRELESS_SETTINGS_UP";    private final String WIRED_OFF_ACTION = "android.settings.WIRELESS_SETTINGS_DOWN";    private final String WIRED_REMOVE_ACTION = "android.settings.WIRELESS_SETTINGS_REMOVED";    private int[] wifiImages = new int[] { R.drawable.wifi_level1, R.drawable.wifi_level2,            R.drawable.wifi_level3, R.drawable.wifi_level4, R.drawable.wifi_level5 };    private NetChangedBroadcastReceiver netChangedBroadcastReceiver;    private ImageView wifiImageView, wiredImageView;    private ImageView sdcardImageView, usbImageView;    private EthernetSettings ethernetUtil;    private EthernetInfo ehtherInfo;    private Context context;    private MediaMountedBroadcastReceiver mediaMountedBroadcastReceiver;    public SystemInfoView(Context context, AttributeSet attrs) {        super(context, attrs);        this.context = context;        LayoutInflater.from(getContext()).inflate(R.layout.system_info, this);        wifiImageView = (ImageView) findViewById(R.id.imageView_wifi);        wiredImageView = (ImageView) findViewById(R.id.imageView_wired);        sdcardImageView = (ImageView) findViewById(R.id.imageView_sdcard);        usbImageView = (ImageView) findViewById(R.id.imageView_usb);        wifiUtil = new WifiUtil(context);        setWifiLevel();        // 设置有线连接的初始状态        if (isEthernetAvailable()) {            setWired(true);        } else {            setWired(false);        }        // 判断是否有储存设备,已经储存设备类型        if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {            File sdcardPath = new File("mnt/sdcardEx/");            File usbPath = new File("mnt/usbdisk/usbdisk1");            if (sdcardPath.listFiles() != null) {                setSdcard(true);            }            if (usbPath.listFiles() != null) {                setUsb(true);            }        }        // 注册广播接收器        registerBroadastReceiver(context);    }    /**     * 获取有线连接的状态     */    public boolean isEthernetAvailable() {        ethernetUtil = new EthernetSettings();        ehtherInfo = new EthernetInfo();        ehtherInfo = ethernetUtil.getEthernet();        if (ehtherInfo.ip.equals("0.0.0.0")) {            return false;        } else {            return true;        }    }    public void setWifiLevel() {        WifiInfo info = wifiUtil.getConnectInfo();        if (info == null) {            wifiImageView.setBackgroundResource(R.drawable.wifi_level0);            return;        }        int signalStrength = info.getRssi();        // 计算信号强度等级        int level = wifiUtil.calculateSignal(signalStrength, 5);        switch (level) {        case 0:            wifiImageView.setBackgroundResource(wifiImages[0]);            break;        case 1:            wifiImageView.setBackgroundResource(wifiImages[1]);            break;        case 2:            wifiImageView.setBackgroundResource(wifiImages[2]);            break;        case 3:            wifiImageView.setBackgroundResource(wifiImages[3]);            break;        case 4:            wifiImageView.setBackgroundResource(wifiImages[4]);            break;        }    }    public void setWired(boolean state) {        if (state) {            wiredImageView.setImageResource(R.drawable.wired_on);        } else {            wiredImageView.setImageResource(R.drawable.wired_off);        }    }    public void setSdcard(boolean state) {        if (state) {            sdcardImageView.setImageResource(R.drawable.sdcard_on);        } else {            sdcardImageView.setImageResource(R.drawable.sdcard_off);        }    }    public void setUsb(boolean state) {        if (state) {            usbImageView.setImageResource(R.drawable.usb_on);        } else {            usbImageView.setImageResource(R.drawable.usb_off);        }    }    /**     * 注册广播接收器     */    private void registerBroadastReceiver(Context context) {        IntentFilter filter = new IntentFilter();        filter.addAction(RSSI_CHANGED_ACTION);        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        filter.addAction(WIRED_ON_ACTION);        filter.addAction(WIRED_REMOVE_ACTION);        // 注册有线,无线连接的广播接收器        netChangedBroadcastReceiver = new NetChangedBroadcastReceiver();        context.registerReceiver(netChangedBroadcastReceiver, filter);        IntentFilter mediaMountedBroadcastFilter = new IntentFilter();        mediaMountedBroadcastFilter.addDataScheme("file");        mediaMountedBroadcastFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);        mediaMountedBroadcastFilter.addAction(Intent.ACTION_MEDIA_REMOVED);        mediaMountedBroadcastFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);        mediaMountedBroadcastFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);        // 注册sdcard,usb挂载的广播接收器        mediaMountedBroadcastReceiver = new MediaMountedBroadcastReceiver();        context.registerReceiver(mediaMountedBroadcastReceiver, mediaMountedBroadcastFilter);    }    /**     * 注销广播接收器     */    public void unregisterReceiver(Context context) {        context.unregisterReceiver(netChangedBroadcastReceiver);        context.unregisterReceiver(mediaMountedBroadcastReceiver);    }    class MediaMountedBroadcastReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            if (intent.getAction().equals(Intent.ACTION_MEDIA_MOUNTED)) {                // sdcard, 或者usb接入                if (intent.getDataString().contains("sdcardEx")) {                    setSdcard(true);                } else if (intent.getDataString().contains("usbdisk")) {                    setUsb(true);                }            } else if (intent.getAction().equals(Intent.ACTION_MEDIA_REMOVED)                    || intent.getAction().equals(Intent.ACTION_MEDIA_BAD_REMOVAL)                    || intent.getAction().equals(Intent.ACTION_MEDIA_UNMOUNTED)) {                // sdcard,或者usb拔出                if (intent.getDataString().contains("sdcardEx")) {                    setSdcard(false);                } else if (intent.getDataString().contains("usbdisk")) {                    setUsb(false);                }            }        }    }    class NetChangedBroadcastReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            if (intent.getAction().equals(RSSI_CHANGED_ACTION)) {                //无线信号改变                setWifiLevel();            }            if (intent.getAction().equals(WIRED_ON_ACTION)) {                // 有线连接上                setWired(true);            } else if (intent.getAction().equals(WIRED_REMOVE_ACTION)) {                // 有线断开                setWired(false);            }        }    }}

以上两种方法的区别在于注册广播的地方不同,静态广播接收器在配置文件里面注册,而动态广播接收器在代码里面注册。

更多相关文章

  1. Android Jni代码示例讲解
  2. Android 统计图表引擎 AChartEngine(三) - 示例源码折线图、饼图
  3. GridView示例2(自动增长)
  4. Android GridView 使用示例
  5. Android Studio 官方示例源码地址
  6. android 权限示例
  7. Android简明开发教程二十四篇及示例代码下载
  8. WPF MaterialDesign 示例开源项目介绍
  9. C#如何在图片增加文字的示例代码分享

随机推荐

  1. BSD系统正在死亡?一些安全研究人员这样认
  2. 闪存(SSD)技术,MLC和SLC差距到底有多大?
  3. 做项目,如同斗地主,玩得就是心跳!
  4. Gartner:政府CIO将在2018年增加云、网络安
  5. pmp是什么意思?pmp值得学吗?
  6. 一文深入理解快照技术
  7. 双活距离太远为啥用波分,容灾链路设计关键
  8. Kubernetes集群组件的安全
  9. 知识干货: GPU关键参数和应用场景
  10. Linus Torvalds 称英特尔的补丁为“垃圾