Android開發(fā)中我們經(jīng)常會用到一些獲取手機信息的方法询微,在這里記錄一下
public class AndroidUtil {
public static final String TAG = "AndroidUtil";
public static final String NET_WIFI = "WIFI";
public static final String NET_4G = "4G";
public static final String NET_3G = "3G";
public static final String NET_2G = "2G";
public static final String NET_UNKNOWN = "UNKNOWN";
/**
* 獲取手機唯一序列號
* 注:如取不到設(shè)備號犀忱,則取UUID作為手機唯一序列號
*/
public static String getDeviceUUID(Context context) {
return Installation.id(context);
}
/**
* 獲取手機序列號
*/
public static String getDeviceId(Context context) {
String deviceID = null;
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (!StringTools.isEmpty(tm.getDeviceId())) {
deviceID = tm.getDeviceId();
}
return deviceID;
}
/**
* 根據(jù)手機的分辨率從 dp 的單位 轉(zhuǎn)成為 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 說明:根據(jù)手機的分辨率將sp轉(zhuǎn)成為px
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
/**
* 根據(jù)手機的分辨率從 px(像素) 的單位 轉(zhuǎn)成為 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* 獲取應(yīng)用的ApplicationId
*
* @param context
* @return
*/
public static String getApplicationId(Context context) {
try {
String pkName = context.getPackageName();
return pkName;
} catch (Exception e) {
}
return null;
}
/**
* 取得操作系統(tǒng)版本號
*/
public static String getOSVersion(Context context) {
return android.os.Build.VERSION.RELEASE;
}
/**
* 獲取應(yīng)用版本號
*/
public static String getAppVersion(Context context) {
String strVersion = null;
try {
PackageInfo pi = null;
pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
if (pi != null) {
strVersion = pi.versionName;
}
} catch (NameNotFoundException e) {
Logs.e(TAG, e.getMessage(), e);
}
return strVersion;
}
/**
* 獲取簽名摘要
*/
public static String getSign(Context context) {
String strSign = null;
try {
int flag = PackageManager.GET_SIGNATURES;
PackageManager pm = context.getPackageManager();
List<PackageInfo> apps = pm.getInstalledPackages(flag);
Object[] objs = apps.toArray();
for (int i = 0, j = objs.length; i < j; i++) {
PackageInfo packageinfo = (PackageInfo) objs[i];
String packageName = packageinfo.packageName;
if (packageName.equals(context.getPackageName())) {
Signature[] temps = packageinfo.signatures;
Signature tmpSign = temps[0];
strSign = tmpSign.toCharsString();
}
}
} catch (Exception e) {
}
return strSign;
}
/**
* 判斷手機是否ROOT
*/
public static boolean isSystemRoot() {
boolean isRoot = false;
try {
isRoot = (new File("/system/bin/su").exists())
|| (new File("/system/xbin/su").exists());
Logs.d("TAG", "isRoot = " + isRoot);
} catch (Exception e) {
}
return isRoot;
}
public static String getHostIP(Context activity) {
String hostIp = null;
try {
Enumeration nis = NetworkInterface.getNetworkInterfaces();
InetAddress ia = null;
while (nis.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) nis.nextElement();
Enumeration<InetAddress> ias = ni.getInetAddresses();
while (ias.hasMoreElements()) {
ia = ias.nextElement();
if (ia instanceof Inet6Address) {
continue;// skip ipv6
}
String ip = ia.getHostAddress();
if (!"127.0.0.1".equals(ip)) {
hostIp = ia.getHostAddress();
break;
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return hostIp;
}
/**
* 返回用戶手機運營商標識
*/
public static String getProvidersName(Context context) {
String ProvidersName = null;
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String IMSI = telephonyManager.getSubscriberId(); // 返回唯一的用戶ID;就是這張卡的編號神馬的
if (IMSI == null)
return "";//unkwon
// IMSI號前面3位460是國家,緊接著后面2位00 02是中國移動笙僚,01是中國聯(lián)通,03是中國電信宜狐。其中
if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
ProvidersName = "03";//中國移動
} else if (IMSI.startsWith("46001")) {
ProvidersName = "02";//中國聯(lián)通
} else if (IMSI.startsWith("46003")) {
ProvidersName = "01";//中國電信
}
return ProvidersName;
}
/**
* 網(wǎng)絡(luò)類型判斷
*/
public static String getNetworkType(Context context) {
String strNetworkType = NET_UNKNOWN;
NetworkInfo networkInfo = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
strNetworkType = NET_WIFI;
} else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
String _strSubTypeName = networkInfo.getSubtypeName();
// TD-SCDMA networkType is 17
int networkType = networkInfo.getSubtype();
switch (networkType) {
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: // api<8 : replace by
strNetworkType = NET_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: // api<9 : replace by 14
case TelephonyManager.NETWORK_TYPE_EHRPD: // api<11 : replace by 12
case TelephonyManager.NETWORK_TYPE_HSPAP: // api<13 : replace by 15
strNetworkType = NET_3G;
break;
case TelephonyManager.NETWORK_TYPE_LTE: // api<11 : replace by 13
strNetworkType = NET_4G;
break;
default:
// http://baike.baidu.com/item/TD-SCDMA 中國移動 聯(lián)通 電信 三種3G制式
if (_strSubTypeName.equalsIgnoreCase("TD-SCDMA") || _strSubTypeName.equalsIgnoreCase("WCDMA")
|| _strSubTypeName.equalsIgnoreCase("CDMA2000")) {
strNetworkType = NET_3G;
} else {
strNetworkType = _strSubTypeName;
}
break;
}
}
}
return strNetworkType;
}
/**
* 獲取當前手機系統(tǒng)版本號
*
* @return 系統(tǒng)版本號
*/
public static String getSystemVersion() {
return android.os.Build.VERSION.RELEASE;
}
/**
* 獲取手機型號
*
* @return 手機型號
*/
public static String getSystemModel() {
return android.os.Build.MODEL;
}
/**
* 判斷當前設(shè)備是手機還是平板饭豹,代碼來自 Google I/O App for Android
* @param context
* @return 平板返回 True,手機返回 False
*/
public static boolean isPad(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
/**
* 獲取手機廠商
*
* @return 手機廠商
*/
public static String getDeviceBrand() {
return android.os.Build.BRAND;
}
}