Android獲取手機信息方法整理

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;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毕贼,一起剝皮案震驚了整個濱河市温赔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鬼癣,老刑警劉巖陶贼,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異待秃,居然都是意外死亡拜秧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門锥余,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腹纳,“玉大人痢掠,你說我怎么就攤上這事驱犹。” “怎么了足画?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵雄驹,是天一觀的道長。 經(jīng)常有香客問我淹辞,道長医舆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任象缀,我火速辦了婚禮蔬将,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘央星。我一直安慰自己霞怀,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布莉给。 她就那樣靜靜地躺著毙石,像睡著了一般廉沮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徐矩,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天滞时,我揣著相機與錄音,去河邊找鬼滤灯。 笑死坪稽,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鳞骤。 我是一名探鬼主播刽漂,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弟孟!你這毒婦竟也來了贝咙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤拂募,失蹤者是張志新(化名)和其女友劉穎庭猩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陈症,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蔼水,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了录肯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趴腋。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖论咏,靈堂內(nèi)的尸體忽然破棺而出优炬,到底是詐尸還是另有隱情,我是刑警寧澤厅贪,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布蠢护,位于F島的核電站,受9級特大地震影響养涮,放射性物質(zhì)發(fā)生泄漏葵硕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一贯吓、第九天 我趴在偏房一處隱蔽的房頂上張望懈凹。 院中可真熱鬧,春花似錦悄谐、人聲如沸介评。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽威沫。三九已至贤惯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棒掠,已是汗流浹背孵构。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烟很,地道東北人颈墅。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓雾袱,卻偏偏與公主長得像恤筛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芹橡,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容