你想获取到的各种状态
你是否从小就有这样的梦想,获取到这些数据呢?
- 网络数据类型
- 网络数据信号强度
- wifi状态
- 蓝牙状态
- GPS状态
- 电量
- 充电状态
网络数据类型
数据类型枚举类
public enum NetworkType {
NETWORK_WIFI("WiFi"),
NETWORK_4G("4G"),
NETWORK_2G("2G"),
NETWORK_3G("3G"),
NETWORK_UNKNOWN("Unknown"),
NETWORK_NO("No network");
private String desc;
NetworkType(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return desc;
}
}
注册广播
IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
netStateChangeReceiver = new NetStateChangeReceiver();
广播接收者:
class NetStateChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
NetworkType networkType = NetworkUtil.getNetworkType(context);
ICLogger.d("networkType == > " + networkType);
networkTypeValue.postValue(networkType);
}
}
}
信号强度获取
这个不同的版本,获取方式不一样。
TelephonyManager mTelephonyManager = (TelephonyManager) BaseApplication.getAppContext().getSystemService(Context.TELEPHONY_SERVICE);
if (mTelephonyManager != null) {
mTelephonyManager.listen(new PhoneStateListener() {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int asu = signalStrength.getGsmSignalStrength();
int lastSignal = -113 + 2 * asu;
if (lastSignal > 0) {
mobileNetworkSignal = lastSignal + "dBm";
}
logger.info("Current mobileNetworkSignal:" + lastSignal + " dBm");
}
}, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
wifi状态
广播注册
//wifi状态
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
filter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
filter.addAction("android.net.wifi.STATE_CHANGE");
mNetworkChangeListener = new NetworkConnectChangedReceiver();
广播接收者
class NetworkConnectChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 这个监听wifi的打开与关闭,与wifi的连接无关
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
ICLogger.d("wifiState == > " + wifiState);
switch (wifiState) {
case WifiManager.WIFI_STATE_DISABLED:
case WifiManager.WIFI_STATE_DISABLING:
wifiStateValue.postValue(false);
break;
case WifiManager.WIFI_STATE_ENABLING:
case WifiManager.WIFI_STATE_ENABLED:
wifiStateValue.postValue(true);
break;
default:
break;
}
}
}
}
GPS开关状态
通过内容观察者来监听GPS状态变化
//GPS
mContext.getContentResolver()
.registerContentObserver(
Settings.Secure
.getUriFor(Settings.System.LOCATION_PROVIDERS_ALLOWED),
false, mGpsMonitor);
观察者
private ContentObserver mGpsMonitor = new ContentObserver(null) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
LocationManager mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
boolean enabled = mLocationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
gpsState.postValue(enabled);
}
};
充电状态和电量监听
//充电状态
IntentFilter batteryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
context.registerReceiver(batteryLevReceiver, batteryFilter);
广播接受者
private BroadcastReceiver batteryLevReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent batteryStatus) {
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level * 100 / (float) scale;
ICLogger.d("batteryPct == > " + batteryPct);
batteryLev.postValue((int) batteryPct);
// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
isChargingValue.postValue(isCharging);
}
};
由于这是一个粘性广播,其实可以直接获取也可以的。
详情请查看官方文档:
完结
在做Launcher或其他地方,我们常需要显示这些数据信息给用户看的,可以通过这些代码获取。
以上所有的广播,都要在适当的地方进行取消注册,否则容易导致内存泄露。