package com.yaoyumeng.v2ex.utils; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; import java.util.UUID; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.text.format.Formatter; import android.util.DisplayMetrics; /** * Created by yw on 2015/5/9. */ /** * 类说明: 手机工具类 * * @date 2012-2-27 * @version 1.0 */ public class PhoneUtils { // 模拟器的imei号 private static final String EMULATOR_IMIE = "000000000000000"; // 模拟器的手机号码 private static final String EMULATOR_PHONE_NUMBER = "15555215554"; /** * IMEI号、MAC地址,在有些手机上竟然是动态的!! 修改逻辑: * IMEI号、MAC地址,都改为取两遍,如果两次获取的不同,则不使用,改为使用一个randomUUID(该ID生成之后存在本地) 获得手机IMEI * 获取串号失败,则使用MAC地址代替,再失败,则返回随机UUID deviceId = UUID.randomUUID().toString(); * * @param context * @return */ public static String getIMEI(Context context) { SharedPreferences sp = context.getSharedPreferences("myapp_imei", Context.MODE_PRIVATE); String localImei = sp.getString("imei", ""); if (sp.contains("imei") && !TextUtils.isEmpty(localImei)) { return localImei; } else { Editor editor = sp.edit(); String imei = ""; String imei0 = getRealIMEI(context); String imei1 = getRealIMEI(context); // 两次取到的一样,并且不为空,并且不为模拟器的默认值 if (!"".equals(imei0) && !"".equals(imei1) && !EMULATOR_IMIE.equals(imei0) && !EMULATOR_IMIE.equals(imei1) && imei0.equals(imei1)) { imei = imei0; } else { // 取不到、两次获取的不一样,则随机一个出来 imei = UUID.randomUUID().toString(); } editor.putString("imei", imei); editor.commit(); return imei; } } private static String getRealIMEI(Context context) { String deviceId = ""; TelephonyManager telephonyManager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); deviceId = telephonyManager.getDeviceId(); if (TextUtils.isEmpty(deviceId)) { String mac = getMAC(context); if (!TextUtils.isEmpty(mac)) { deviceId = mac; } } return deviceId; } private static String getMAC(Context context) { WifiManager wifi = (WifiManager) context .getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); return info != null ? info.getMacAddress() : ""; } /** * 获取手机IP地址 获取失败,返回"127.0.0.1" * * @return */ @SuppressWarnings("deprecation") public static String getIPAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf .getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { String ip = Formatter.formatIpAddress(inetAddress .hashCode()); return ip; } } } } catch (SocketException ex) { ex.printStackTrace(); } return "127.0.0.1"; } /** * 最低支持的SDK版本 * * @return */ public static int getSDKVersion() { return Build.VERSION.SDK_INT; } /** * 当前程序版本获取 * * @param context * @return */ public static PackageInfo getPackageInfo(Context context) { PackageInfo packInfo = null; PackageManager pm = context.getPackageManager(); try { packInfo = pm.getPackageInfo(context.getPackageName(), 0); } catch (NameNotFoundException e) { e.printStackTrace(); } return packInfo; } public static String getApplicationName(Context context) { PackageManager packageManager = null; ApplicationInfo applicationInfo = null; try { packageManager = context.getPackageManager(); applicationInfo = packageManager.getApplicationInfo( context.getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { applicationInfo = null; } String applicationName = (String) packageManager .getApplicationLabel(applicationInfo); return applicationName; } /** * 获取手机号码 * * @param mContext * @return */ public static String getMobileNumber(Context mContext) { TelephonyManager phoneMgr = (TelephonyManager) mContext .getSystemService(Context.TELEPHONY_SERVICE); String mobileNumber = phoneMgr.getLine1Number(); if (!TextUtils.isEmpty(mobileNumber)) { if (EMULATOR_PHONE_NUMBER.equals(mobileNumber)) { mobileNumber = ""; } } return TextUtils.isEmpty(mobileNumber) ? "" : mobileNumber; } /** * 获取手机设备描述(包括品牌、型号等) * * @param * @return */ public static String getMobileInfo(Context mContext) { StringBuffer sb = new StringBuffer(); sb.append(android.os.Build.MANUFACTURER).append(" ") .append(Build.MODEL).append(" ").append(Build.VERSION.RELEASE); return sb.toString(); } /** * 获取状态栏高度 ldpi=.75, mdpi=1, hdpi=1.5, xhdpi=2 */ public static int getStatusBarHeight(Activity instance) { int statusBarHeight = (int) Math.ceil(25 * instance.getResources() .getDisplayMetrics().density); return statusBarHeight; } /** * 获取屏幕宽度 * * @param instance */ public static int getScreenWidth(Activity instance) { DisplayMetrics dm = new DisplayMetrics(); instance.getWindowManager().getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } }