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; } }