package com.android.pc.util; import java.lang.reflect.Field; import java.util.HashMap; import java.util.List; import android.app.Service; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.Signature; import android.content.res.Configuration; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Build; import android.os.Vibrator; import android.provider.Settings.Secure; import android.telephony.NeighboringCellInfo; import android.telephony.TelephonyManager; import android.view.Display; import android.view.WindowManager; import com.android.pc.ioc.app.Ioc; /** * 获取相关系统信息 * * @author gdpancheng@gmail.com 2013-10-12 下午2:26:34 */ public class Handler_System { public static String UA = Build.MODEL; private static String mIMEI; private static String mSIM; private static String mMobileVersion; private static String mNetwrokIso; private static String mNetType; private static String mDeviceID; private static List<NeighboringCellInfo> mCellinfos; public static final String systemWidth = "width"; public static final String systemHeight = "height"; private static HashMap<String, Integer> map; static{ init(); } /** * 获取应用程序名称 * * @author gdpancheng@gmail.com 2013-10-12 下午2:30:56 * @return * @return String */ public static String getAppName() { return getAppName(null); } /** * 获取应用程序名称 * * @author gdpancheng@gmail.com 2013-10-12 下午2:30:43 * @param packageName * @return * @return String */ public static String getAppName(String packageName) { String applicationName; if (packageName == null) { packageName = Ioc.getIoc().getApplication().getPackageName(); } try { PackageManager packageManager = Ioc.getIoc().getApplication().getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0); applicationName = Ioc.getIoc().getApplication().getString(packageInfo.applicationInfo.labelRes); } catch (Exception e) { Ioc.getIoc().getLogger().e(e); applicationName = ""; } return applicationName; } /** * 获取版本名称 * * @author gdpancheng@gmail.com 2013-10-12 下午2:30:37 * @return * @return String */ public static String getAppVersionNumber() { return getAppVersionNumber(null); } /** * 获取版本名称 * * @author gdpancheng@gmail.com 2013-10-12 下午2:30:27 * @param packageName * @return * @return String */ public static String getAppVersionNumber(String packageName) { String versionName; if (packageName == null) { packageName = Ioc.getIoc().getApplication().getPackageName(); } try { PackageManager packageManager = Ioc.getIoc().getApplication().getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0); versionName = packageInfo.versionName; } catch (Exception e) { Ioc.getIoc().getLogger().e(e); versionName = ""; } return versionName; } /** * 获取应用程序的版本号 * * @author gdpancheng@gmail.com 2013-10-12 下午2:30:12 * @return * @return String */ public static String getAppVersionCode() { return getAppVersionCode(null); } /** * 获取指定应用程序的版本号 * * @author gdpancheng@gmail.com 2013-10-12 下午2:29:51 * @param packageName * @return * @return String */ public static String getAppVersionCode(String packageName) { String versionCode; if (packageName == null) { packageName = Ioc.getIoc().getApplication().getPackageName(); } try { PackageManager packageManager = Ioc.getIoc().getApplication().getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0); versionCode = Integer.toString(packageInfo.versionCode); } catch (Exception e) { Ioc.getIoc().getLogger().e(e); versionCode = ""; } return versionCode; } /** * 获取SDK版本 * * @author gdpancheng@gmail.com 2013-10-12 下午2:29:13 * @return * @return int */ public static int getSdkVersion() { try { return Build.VERSION.class.getField("SDK_INT").getInt(null); } catch (Exception e) { Ioc.getIoc().getLogger().e(e); return 3; } } /* * 判断是否是该签名打包 */ public static boolean isRelease(String signatureString) { final String releaseSignatureString = signatureString; if (releaseSignatureString == null || releaseSignatureString.length() == 0) { throw new RuntimeException("Release signature string is null or missing."); } final Signature releaseSignature = new Signature(releaseSignatureString); try { PackageManager pm = Ioc.getIoc().getApplication().getPackageManager(); PackageInfo pi = pm.getPackageInfo(Ioc.getIoc().getApplication().getPackageName(), PackageManager.GET_SIGNATURES); for (Signature sig : pi.signatures) { if (sig.equals(releaseSignature)) { return true; } } } catch (Exception e) { Ioc.getIoc().getLogger().e(e); return true; } return false; } /** * 判断是否是模拟器 * * @author gdpancheng@gmail.com 2013-10-12 下午2:28:40 * @return * @return boolean */ public static boolean isEmulator() { return Build.MODEL.equals("sdk") || Build.MODEL.equals("google_sdk"); } /** * @author 潘城 gdpancheng@gmail.com 2012-5-7 下午1:21:48 * @Title: getMobileInfo * @Description: 获取手机的硬件信息 * @param @return 设定文件 * @return String 返回类型 */ public static String getMobileInfo() { StringBuffer sb = new StringBuffer(); /** * 通过反射获取系统的硬件信息 获取私有的信息 */ try { Field[] fields = Build.class.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String name = field.getName(); String value = field.get(null).toString(); sb.append(name + "=" + value); sb.append("\n"); } } catch (Exception e) { Ioc.getIoc().getLogger().e(e); } return sb.toString(); } /** * @author 潘城 gdpancheng@gmail.com 2012-5-7 下午5:18:34 * @Title: getDisplayMetrics * @Description: 获取屏幕的分辨率 * @param @param cx * @param @return 设定文件 * @return HashMap<String,Integer> 返回类型 */ public static HashMap<String, Integer> getDisplayMetrics() { if (map == null) { map = new HashMap<String, Integer>(); Display display = ((WindowManager) Ioc.getIoc().getApplication().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); map.put(systemWidth, screenWidth); map.put(systemHeight, screenHeight); } return map; } /** * 获取屏幕宽度缩放率 * @author gdpancheng@gmail.com 2013-10-22 下午1:10:47 * @param width * @return float */ public static float getWidthRoate() { if (map == null) { map = new HashMap<String, Integer>(); Display display = ((WindowManager) Ioc.getIoc().getApplication().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); map.put(systemWidth, screenWidth); map.put(systemHeight, screenHeight); } return (map.get(systemWidth) * 1.00f) / Ioc.getIoc().getMode_w(); } public static float getRoate() { if (map == null) { map = new HashMap<String, Integer>(); Display display = ((WindowManager) Ioc.getIoc().getApplication().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); map.put(systemWidth, screenWidth); map.put(systemHeight, screenHeight); } float w = (map.get(systemWidth) * 1.00f) / Ioc.getIoc().getMode_w(); float h = (map.get(systemHeight) * 1.00f) / Ioc.getIoc().getMode_h(); return w>h?w:h; } public static float getPadRoate() { if (map == null) { map = new HashMap<String, Integer>(); Display display = ((WindowManager) Ioc.getIoc().getApplication().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); map.put(systemWidth, screenWidth); map.put(systemHeight, screenHeight); } float w = (map.get(systemWidth) * 1.00f) / Ioc.getIoc().getMode_w(); float h = (map.get(systemHeight) * 1.00f) / Ioc.getIoc().getMode_h(); return w<h?w:h; } /** * 获取屏幕高度缩放率 * @author gdpancheng@gmail.com 2013-10-22 下午1:11:08 * @param height * @return float */ public static float getHeightRoate() { if (map == null) { map = new HashMap<String, Integer>(); Display display = ((WindowManager) Ioc.getIoc().getApplication().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); map.put(systemWidth, screenWidth); map.put(systemHeight, screenHeight); } return (map.get(systemHeight) * 1.00f) / Ioc.getIoc().getMode_h(); } /** * dp转px * @author gdpancheng@gmail.com 2013-10-22 下午1:11:48 * @param dipValue * @return int */ public static int dip2px(float dipValue) { final float scale = Ioc.getIoc().getApplication().getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } /** * px转dip * TODO(这里用一句话描述这个方法的作用) * @author gdpancheng@gmail.com 2013-10-22 下午1:12:09 * @param pxValue * @return * @return int */ public static int px2dip(float pxValue) { final float scale = Ioc.getIoc().getApplication().getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * 获取通知栏高度 * @author gdpancheng@gmail.com 2012-2-12 下午07:37:13 * @Title: getBarHeight * @param @param context * @param @return 设定文件 * @return int 返回类型 */ public static int getBarHeight() { Class<?> c = null; Object obj = null; Field field = null; int x = 0, sbar = 0; try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField("status_bar_height"); x = Integer.parseInt(field.get(obj).toString()); sbar = Ioc.getIoc().getApplication().getResources().getDimensionPixelSize(x); } catch (Exception e1) { Ioc.getIoc().getLogger().e(e1); } return sbar; } public static boolean hasFroyo() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO; } public static boolean hasGingerbread() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD; } public static boolean hasGingerbreadMR1() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD_MR1; } public static boolean hasHoneycomb() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; } public static boolean hasHoneycombMR1() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1; } public static boolean hasICS() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; } public static boolean hasJellyBean() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; } public static boolean hasJellyBeanMR1() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1; } public static boolean isTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } public static boolean isHoneycombTablet(Context context) { return hasHoneycomb() && isTablet(context); } public static boolean isGingerbread() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD && Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1; } public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork == null || !activeNetwork.isConnected()) { return false; } return true; } public static final int DEFAULT_THREAD_POOL_SIZE = getDefaultThreadPoolSize(); /** * get recommend default thread pool size * * @return if 2 * availableProcessors + 1 less than 8, return it, else return 8; * @see {@link #getDefaultThreadPoolSize(int)} max is 8 */ public static int getDefaultThreadPoolSize() { return getDefaultThreadPoolSize(8); } /** * get recommend default thread pool size * * @param max * @return if 2 * availableProcessors + 1 less than max, return it, else return max; */ public static int getDefaultThreadPoolSize(int max) { int availableProcessors = 2 * Runtime.getRuntime().availableProcessors() + 1; return availableProcessors > max ? max : availableProcessors; } /** * * 设置手机立刻震动 * */ public static void Vibrate(long milliseconds) { Vibrator vib = (Vibrator) Ioc.getIoc().getApplication().getSystemService(Service.VIBRATOR_SERVICE); vib.vibrate(milliseconds); } static TelephonyManager mTm = null; /** * 在获取系统信息前初始化 * @author gdpancheng@gmail.com 2013-10-22 下午1:14:12 * @return void */ public static void init() { mTm = (TelephonyManager) Ioc.getIoc().getApplication().getSystemService(Context.TELEPHONY_SERVICE); mIMEI = mTm.getDeviceId(); mMobileVersion = mTm.getDeviceSoftwareVersion(); mCellinfos = mTm.getNeighboringCellInfo(); mNetwrokIso = mTm.getNetworkCountryIso(); mSIM = mTm.getSimSerialNumber(); mDeviceID = getDeviceId(); try { ConnectivityManager cm = (ConnectivityManager) Ioc.getIoc().getApplication().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = cm.getActiveNetworkInfo(); if (info!=null) { mNetType = info.getTypeName(); } } catch (Exception ex) { } } /** * 获得android设备-唯一标识,android2.2 之前无法稳定运行. * */ public static String getDeviceId(Context mCm) { return Secure.getString(mCm.getContentResolver(), Secure.ANDROID_ID); } /** * 获取设备号 TODO(这里用一句话描述这个方法的作用) * * @author gdpancheng@gmail.com 2013-10-15 下午10:31:48 * @return * @return String */ private static String getDeviceId() { return Secure.getString(Ioc.getIoc().getApplication().getContentResolver(), Secure.ANDROID_ID); } public static String getImei() { return mIMEI; } public static String getSIM() { return mSIM; } public static String getUA() { return UA; } /** * 获取设备信息 以字符串的形式 * @author gdpancheng@gmail.com 2013-10-22 下午1:14:30 * @return String */ public static String getDeviceInfo() { StringBuffer info = new StringBuffer(); info.append("IMEI:").append(getImei()); info.append("\n"); info.append("SIM:").append(getSIM()); info.append("\n"); info.append("UA:").append(getUA()); info.append("\n"); info.append("MobileVersion:").append(mMobileVersion); info.append("\n"); info.append("SDK: ").append(android.os.Build.VERSION.SDK); info.append("\n"); info.append(getCallState()); info.append("\n"); info.append("SIM_STATE: ").append(getSimState()); info.append("\n"); info.append("SIM: ").append(getSIM()); info.append("\n"); info.append(getSimOpertorName()); info.append("\n"); info.append(getPhoneType()); info.append("\n"); info.append(getPhoneSettings()); info.append("\n"); return info.toString(); } /** * 检查sim的状态 * @author gdpancheng@gmail.com 2013-10-22 下午1:15:25 * @return String */ public static String getSimState() { switch (mTm.getSimState()) { case android.telephony.TelephonyManager.SIM_STATE_UNKNOWN: return "未知SIM状态_" + android.telephony.TelephonyManager.SIM_STATE_UNKNOWN; case android.telephony.TelephonyManager.SIM_STATE_ABSENT: return "没插SIM卡_" + android.telephony.TelephonyManager.SIM_STATE_ABSENT; case android.telephony.TelephonyManager.SIM_STATE_PIN_REQUIRED: return "锁定SIM状态_需要用户的PIN码解锁_" + android.telephony.TelephonyManager.SIM_STATE_PIN_REQUIRED; case android.telephony.TelephonyManager.SIM_STATE_PUK_REQUIRED: return "锁定SIM状态_需要用户的PUK码解锁_" + android.telephony.TelephonyManager.SIM_STATE_PUK_REQUIRED; case android.telephony.TelephonyManager.SIM_STATE_NETWORK_LOCKED: return "锁定SIM状态_需要网络的PIN码解锁_" + android.telephony.TelephonyManager.SIM_STATE_NETWORK_LOCKED; case android.telephony.TelephonyManager.SIM_STATE_READY: return "就绪SIM状态_" + android.telephony.TelephonyManager.SIM_STATE_READY; default: return "未知SIM状态_" + android.telephony.TelephonyManager.SIM_STATE_UNKNOWN; } } /** * 获取手机信号状态 * @author gdpancheng@gmail.com 2013-10-22 下午1:15:37 * @return String */ public static String getPhoneType() { switch (mTm.getPhoneType()) { case android.telephony.TelephonyManager.PHONE_TYPE_NONE: return "PhoneType: 无信号_" + android.telephony.TelephonyManager.PHONE_TYPE_NONE; case android.telephony.TelephonyManager.PHONE_TYPE_GSM: return "PhoneType: GSM信号_" + android.telephony.TelephonyManager.PHONE_TYPE_GSM; case android.telephony.TelephonyManager.PHONE_TYPE_CDMA: return "PhoneType: CDMA信号_" + android.telephony.TelephonyManager.PHONE_TYPE_CDMA; default: return "PhoneType: 无信号_" + android.telephony.TelephonyManager.PHONE_TYPE_NONE; } } /** * 服务商名称:例如:中国移动、联通    SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).    */ public static String getSimOpertorName() { if (mTm.getSimState() == android.telephony.TelephonyManager.SIM_STATE_READY) { StringBuffer sb = new StringBuffer(); sb.append("SimOperatorName: ").append(mTm.getSimOperatorName()); sb.append("\n"); sb.append("SimOperator: ").append(mTm.getSimOperator()); sb.append("\n"); sb.append("Phone:").append(mTm.getLine1Number()); return sb.toString(); } else { StringBuffer sb = new StringBuffer(); sb.append("SimOperatorName: ").append("未知"); sb.append("\n"); sb.append("SimOperator: ").append("未知"); return sb.toString(); } } /** * 获取手机设置状态 比如蓝牙开启与否 * @author gdpancheng@gmail.com 2013-10-22 下午1:16:02 * @return String */ public static String getPhoneSettings() { StringBuffer buf = new StringBuffer(); String str = Secure.getString(Ioc.getIoc().getApplication().getContentResolver(), Secure.BLUETOOTH_ON); buf.append("蓝牙:"); if (str.equals("0")) { buf.append("禁用"); } else { buf.append("开启"); } // str = Secure.getString(Ioc.getIoc().getApplication().getContentResolver(), Secure.BLUETOOTH_ON); buf.append("WIFI:"); buf.append(str); str = Secure.getString(Ioc.getIoc().getApplication().getContentResolver(), Secure.INSTALL_NON_MARKET_APPS); buf.append("APP位置来源:"); buf.append(str); return buf.toString(); } /** * 获取电话状态 * @author gdpancheng@gmail.com 2013-10-22 下午1:16:37 * @return String */ public static String getCallState() { switch (mTm.getCallState()) { case android.telephony.TelephonyManager.CALL_STATE_IDLE: return "电话状态[CallState]: 无活动"; case android.telephony.TelephonyManager.CALL_STATE_OFFHOOK: return "电话状态[CallState]: 无活动"; case android.telephony.TelephonyManager.CALL_STATE_RINGING: return "电话状态[CallState]: 无活动"; default: return "电话状态[CallState]: 未知"; } } public static String getNetwrokIso() { return mNetwrokIso; } /** * @return the mDeviceID */ public String getmDeviceID() { return mDeviceID; } /** * @return the mNetType */ public String getNetType() { return mNetType; } }