Android静态,动态广播示例
16lz
2021-01-23
静态广播示例:
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); } } }}
以上两种方法的区别在于注册广播的地方不同,静态广播接收器在配置文件里面注册,而动态广播接收器在代码里面注册。
更多相关文章
- Android Jni代码示例讲解
- Android 统计图表引擎 AChartEngine(三) - 示例源码折线图、饼图
- GridView示例2(自动增长)
- Android GridView 使用示例
- Android Studio 官方示例源码地址
- android 权限示例
- Android简明开发教程二十四篇及示例代码下载
- WPF MaterialDesign 示例开源项目介绍
- C#如何在图片增加文字的示例代码分享