|
|
|
|
package com.xinyingpower.microphoto;
|
|
|
|
|
|
|
|
|
|
import android.app.AlarmManager;
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
import android.net.ConnectivityManager;
|
|
|
|
|
import android.net.NetworkInfo;
|
|
|
|
|
import android.telephony.CellLocation;
|
|
|
|
|
import android.telephony.PhoneStateListener;
|
|
|
|
|
import android.telephony.ServiceState;
|
|
|
|
|
import android.telephony.SignalStrength;
|
|
|
|
|
import android.telephony.TelephonyManager;
|
|
|
|
|
import android.telephony.cdma.CdmaCellLocation;
|
|
|
|
|
import android.telephony.gsm.GsmCellLocation;
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
|
|
public class DeviceUtil {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
|
|
|
|
|
|
|
|
|
|
public static final int SIGNAL_STRENGTH_POOR = 1;
|
|
|
|
|
|
|
|
|
|
public static final int SIGNAL_STRENGTH_MODERATE = 2;
|
|
|
|
|
|
|
|
|
|
public static final int SIGNAL_STRENGTH_GOOD = 3;
|
|
|
|
|
|
|
|
|
|
public static final int SIGNAL_STRENGTH_GREAT = 4;
|
|
|
|
|
|
|
|
|
|
public static final int NUM_SIGNAL_STRENGTH_BINS = 5;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//无 ,低劣的 ,适度的 ,好 ,优异的
|
|
|
|
|
public static final String[] SIGNAL_STRENGTH_NAMES = {
|
|
|
|
|
"none", "poor", "moderate", "good", "great"
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public static String getNetworkType(Context context) {
|
|
|
|
|
|
|
|
|
|
// ConnectionManager instance
|
|
|
|
|
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
|
|
|
NetworkInfo ni = connectivityManager.getActiveNetworkInfo();
|
|
|
|
|
|
|
|
|
|
// If not connected, "-" will be displayed
|
|
|
|
|
if (ni == null || !ni.isConnected()) return "";
|
|
|
|
|
|
|
|
|
|
// If Connected to Wifi
|
|
|
|
|
if (ni.getType() == ConnectivityManager.TYPE_WIFI) return "WIFI";
|
|
|
|
|
|
|
|
|
|
// If Connected to Mobile
|
|
|
|
|
String subTypeName = "";
|
|
|
|
|
if (ni.getType() == ConnectivityManager.TYPE_MOBILE) {
|
|
|
|
|
int subType = ni.getSubtype();
|
|
|
|
|
switch (subType) {
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_GPRS:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_EDGE:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_CDMA:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_1xRTT:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_IDEN:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_GSM:
|
|
|
|
|
subTypeName = "2G";
|
|
|
|
|
break;
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_UMTS:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_EVDO_0:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_EVDO_A:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_HSDPA:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_HSUPA:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_HSPA:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_EVDO_B:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_EHRPD:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_HSPAP:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
|
|
|
|
|
subTypeName = "3G";
|
|
|
|
|
break;
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_LTE:
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_IWLAN:
|
|
|
|
|
case 19:
|
|
|
|
|
subTypeName = "4G";
|
|
|
|
|
break;
|
|
|
|
|
case TelephonyManager.NETWORK_TYPE_NR:
|
|
|
|
|
subTypeName = "5G";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
subTypeName = "";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return subTypeName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void getPhoneState(Context context) {
|
|
|
|
|
final TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
|
|
|
|
PhoneStateListener MyPhoneListener = new PhoneStateListener() {
|
|
|
|
|
@Override
|
|
|
|
|
//获取对应网络的ID,这个方法在这个程序中没什么用处
|
|
|
|
|
public void onCellLocationChanged(CellLocation location) {
|
|
|
|
|
if (location instanceof GsmCellLocation) {
|
|
|
|
|
int CID = ((GsmCellLocation) location).getCid();
|
|
|
|
|
} else if (location instanceof CdmaCellLocation) {
|
|
|
|
|
int ID = ((CdmaCellLocation) location).getBaseStationId();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//系统自带的服务监听器,实时监听网络状态
|
|
|
|
|
@Override
|
|
|
|
|
public void onServiceStateChanged(ServiceState serviceState) {
|
|
|
|
|
super.onServiceStateChanged(serviceState);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//这个是我们的主角,就是获取对应网络信号强度
|
|
|
|
|
@Override
|
|
|
|
|
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
|
|
|
|
|
//这个ltedbm 是4G信号的值
|
|
|
|
|
String signalinfo = signalStrength.toString();
|
|
|
|
|
String[] parts = signalinfo.split(" ");
|
|
|
|
|
String ltedbm = parts[9];
|
|
|
|
|
//这个dbm 是2G和3G信号的值
|
|
|
|
|
int asu = signalStrength.getGsmSignalStrength();
|
|
|
|
|
int dbm = -113 + 2 * asu;
|
|
|
|
|
|
|
|
|
|
if (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_LTE) {
|
|
|
|
|
Log.i("NetWorkUtil", "网络:LTE 信号强度:" + ltedbm + "======Detail:" + signalinfo);
|
|
|
|
|
} else if (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSDPA ||
|
|
|
|
|
telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSPA ||
|
|
|
|
|
telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSUPA ||
|
|
|
|
|
telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS) {
|
|
|
|
|
String bin;
|
|
|
|
|
if (dbm > -75) {
|
|
|
|
|
bin = "网络很好";
|
|
|
|
|
} else if (dbm > -85) {
|
|
|
|
|
bin = "网络不错";
|
|
|
|
|
} else if (dbm > -95) {
|
|
|
|
|
bin = "网络还行";
|
|
|
|
|
} else if (dbm > -100) {
|
|
|
|
|
bin = "网络很差";
|
|
|
|
|
} else {
|
|
|
|
|
bin = "网络错误";
|
|
|
|
|
}
|
|
|
|
|
Log.i("NetWorkUtil", "网络:WCDMA 信号值:" + dbm + "========强度:" + bin + "======Detail:" + signalinfo);
|
|
|
|
|
} else {
|
|
|
|
|
String bin;
|
|
|
|
|
if (asu < 0 || asu >= 99) bin = "网络错误";
|
|
|
|
|
else if (asu >= 16) bin = "网络很好";
|
|
|
|
|
else if (asu >= 8) bin = "网络不错";
|
|
|
|
|
else if (asu >= 4) bin = "网络还行";
|
|
|
|
|
else bin = "网络很差";
|
|
|
|
|
Log.i("NetWorkUtil", "网络:GSM 信号值:" + dbm + "========强度:" + bin + "======Detail:" + signalinfo);
|
|
|
|
|
}
|
|
|
|
|
super.onSignalStrengthsChanged(signalStrength);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
telephonyManager.listen(MyPhoneListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static boolean updateTime(Context context, long timeInMillis) {
|
|
|
|
|
boolean res = false;
|
|
|
|
|
try {
|
|
|
|
|
// Calendar c = Calendar.getInstance();
|
|
|
|
|
// c.set(2010, 1, 1, 12, 00, 00);
|
|
|
|
|
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
|
|
|
|
am.setTime(timeInMillis);
|
|
|
|
|
res = true;
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
int aa = 0;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|