前言
欢迎大家我分享和推荐好用的代码段~~
声明
欢迎转载,但请保留文章原始出处:
CSDN:http://www.csdn.net
雨季o莫忧离:http://blog.csdn.net/luckkof
正文
静态广播示例:
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);
}
}
}
}
以上两种方法的区别在于注册广播的地方不同,静态广播接收器在配置文件里面注册,而动态广播接收器在代码里面注册。