Android静态,动态广播示例

Android静态,动态广播示例

静态广播示例:

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);
            }
        }
    }
}
复制代码

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值