AndroidのHelperヘルプクラス


package com.huaiye.ecs.common.utils;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Environment;
import android.os.PowerManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import java.util.List;
import java.util.UUID;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

/**
 * ******************************
 * @    :KukiHelper.java
 * @    :Administrator
 * @    :2015 7 4 
 * @    :ccc
 * *****************************
 */
public class Helper {

    static Context context = App.getInstance();

    private Helper() {
    }

    // sp convert to px
    public static int sp2px(int spValue) {
        float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
        int pxValue = (int) (spValue * scaledDensity + 0.5f);
        return pxValue;
    }

    // px convert to sp
    public static int px2sp(int pxValue) {
        float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
        int spValue = (int) (pxValue / scaledDensity + 0.5f);
        return spValue;
    }

    // dp convert to px
    public static int dp2px(int dpValue) {
        float density = context.getResources().getDisplayMetrics().density;
        int pxValue = (int) (dpValue * density + 0.5f);
        return pxValue;
    }

    // px convert to dp
    public static int px2dp(int pxValue) {
        float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
        int dpValue = (int) (pxValue * scaledDensity + 0.5f);
        return dpValue;
    }

    // findView
    public static <T extends View> T findViewById(View rootView, int id) {
        View target = rootView.findViewById(id);
        return (T) target;
    }

    // findView
    public static <T extends View> T findViewById(Activity ac, int id) {
        View target = ac.findViewById(id);
        return (T) target;
    }

    //     
    public static String packageName() {
        String name = context.getPackageName();
        return name;
    }

    //      
    public static int versionCode() {
        int version = -1;
        try {
            String packageName = packageName();
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
            version = packageInfo.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        return version;
    }

    //       
    public static String versionName() {
        String versionCode = null;
        try {
            String packageName = packageName();
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
            versionCode = packageInfo.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionCode;
    }

    //   xml    String  
    public static String getStringResource(int id) {
        return context.getResources().getString(id);
    }

    //   xml  Color   
    public static int getColorResource(int id) {
        return context.getResources().getColor(id);
    }

    //   xml  Integer  
    public static int getIntegerResource(int id) {
        return context.getResources().getInteger(id);
    }

    //   xml  String  
    public static String[] getStringArrayResource(int id) {
        return context.getResources().getStringArray(id);
    }

    //   Assets       
    public static InputStream getAssetsResource(String filename) {
        try {
            return context.getAssets().open(filename);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    //   Assets  String  
    public static String getAssetString(String name) {
        String string = "";
        AssetManager asset = context.getAssets();
        try {
            InputStream input = asset.open(name);
            byte[] buffer = new byte[input.available()];
            input.read(buffer);
            input.close();
            string = new String(buffer, "utf-8");

        } catch (IOException e) {
            e.printStackTrace();
        }
        return string;
    }

    //   assets  Bitmap  
    public static Bitmap getAssetBitmap(String name) {
        InputStream is = getAssetsResource(name);
        if (is != null) {
            Bitmap bm = BitmapFactory.decodeStream(is);
            return bm;
        }
        return null;
    }

    //   Raw       
    public static InputStream getRawResource(int id) {
        return context.getResources().openRawResource(id);
    }

    //   xml  Integer  
    public static int[] getIntegerArrayResource(int id) {
        return context.getResources().getIntArray(id);
    }

    //   Drawable
    public static Drawable getDrawable(int id) {
        return context.getResources().getDrawable(id);
    }

    //   Animations
    public static Animation getAnimation(int id) {
        return AnimationUtils.loadAnimation(context, id);
    }

    //     
    public static int getScreenWidth() {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    //     
    public static int getScreenHeight() {
        return context.getResources().getDisplayMetrics().heightPixels;
    }

    // IMEI
    public static String getIMEI() {
        String imei = ((TelephonyManager) context
                .getApplicationContext()
                .getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
        return imei;
    }

    // IMSI
    public static String getIMSI() {
        String imsi = ((TelephonyManager) context.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getSubscriberId();
        return imsi;
    }

    public static String getDeviceUniqueId(){
        String serial = null;

        String m_szDevIDShort = "35" +
                Build.BOARD.length()%10+ Build.BRAND.length()%10 +

                Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +

                Build.DISPLAY.length()%10 + Build.HOST.length()%10 +

                Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +

                Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +

                Build.TAGS.length()%10 + Build.TYPE.length()%10 +

                Build.USER.length()%10 ; //13  

        try {
            serial = Build.class.getField("SERIAL").get(null).toString();
            //API>=9   serial 
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial       
            serial = "serial"; //        
        }

        //           15   
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }

    //     
    public static String getModel() {
        return Build.MODEL;
    }

    //      
    public static String getManufacturer() {
        return Build.MANUFACTURER;
    }

    /**
     *         
     */
    public static int getStatusHeight() {
        int statusHeight = -1;
        try {
            Class> clazz = Class.forName("com.android.internal.R$dimen");
            Object object = clazz.newInstance();
            int height = Integer.parseInt(clazz.getField("status_bar_height")
                    .get(object).toString());
            statusHeight = context.getResources().getDimensionPixelSize(height);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return statusHeight;
    }

    /**
     *      */
    public static Bitmap snapShotWithStatusBar(Activity activity) {
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bmp = view.getDrawingCache();
        int width = getScreenWidth();
        int height = getScreenHeight();
        Bitmap bp = null;
        bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
        view.destroyDrawingCache();
        return bp;

    }

    /**
     *        
     *
     * @return
     */
    public static int statusHeight(Activity activity) {
        Rect frame = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
        int statusBarHeight = frame.top;
        return statusBarHeight;
    }

    /**
     *      */
    public static Bitmap snapShotWithoutStatusBar(Activity activity) {
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bmp = view.getDrawingCache();
        Rect frame = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
        int statusBarHeight = frame.top;

        int width = getScreenWidth();
        int height = getScreenHeight();
        Bitmap bp = null;
        bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
                - statusBarHeight);
        view.destroyDrawingCache();
        return bp;

    }

    //      
    public static String getOsReleaseVersion() {
        return Build.VERSION.RELEASE;
    }

    //   SDK  
    public static int getOsSdkVersion() {
        return Build.VERSION.SDK_INT;
    }

    //    uuid
    public static String getUUid() {
        String uuidString = UUID.randomUUID().toString();
        return uuidString;
    }

    // Application     key name      value
    public static <T> T getAppMetaData(String name) {
        ApplicationInfo appInfo;
        try {
            appInfo = context.getPackageManager().getApplicationInfo(
                    context.getPackageName(), PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return null;
        }
        if (appInfo.metaData != null && appInfo.metaData.containsKey(name)) {
            return (T) appInfo.metaData.get(name);
        }
        return null;
    }

    /**
     *          App    
     * @return
     */
    public static List getInstalledPackages(){
        PackageManager pm = context.getPackageManager();
        return pm.getInstalledPackages(0);
    }

    /**
     *   App        
     * @param pi
     * @return
     */
    public static boolean isAppSystemInstalled(PackageInfo pi){
        if((pi.applicationInfo.flags& ApplicationInfo.FLAG_SYSTEM)==0&&
                (pi.applicationInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)==0){
            return false;
        }else {
            return true;
        }
    }

    /**
     *         
     */
    public static String getAppName() {
//             
//        try {
//            PackageManager packageManager = context.getPackageManager();
//            PackageInfo packageInfo = packageManager.getPackageInfo(
//                    context.getPackageName(), 0);
//            int labelRes = packageInfo.applicationInfo.labelRes;
//            return context.getResources().getString(labelRes);
//        } catch (PackageManager.NameNotFoundException e) {
//            e.printStackTrace();
//        }
        PackageManager packageManager = context.getPackageManager();
        return packageManager.getApplicationLabel(context.getApplicationInfo()).toString();
    }

    //               
    public static String getCurrentProcessName() {
        int pid = android.os.Process.myPid();
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {
            if (appProcess.pid == pid) {
                return appProcess.processName;
            }
        }
        return null;
    }

    /**
     *   SSL      
     *       HttpsURLConnection 
     */
    public static void useUntrustedCertificate() {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }

                    public void checkClientTrusted(
                            X509Certificate[] certs, String authType) {
                    }

                    public void checkServerTrusted(
                            X509Certificate[] certs, String authType) {
                    }
                }
        };
        // Install the all-trusting trust manager
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *      
     */
    public static void openKeyboard(EditText mEditText) {
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
    }

    /**
     *      
     */
    public static void closeKeyboard(EditText mEditText) {
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
    }


    // mac  
    //      ACCESS_WIFI_STATE
    public static String getLocalMacAddress() {
        String macSerial = null;
        String str = "";

        try {
            Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address ");
            InputStreamReader ir = new InputStreamReader(pp.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);

            for (; null != str; ) {
                str = input.readLine();
                if (str != null) {
                    macSerial = str.trim();//    
                    break;
                }
            }
        } catch (IOException ex) {
            //      
            ex.printStackTrace();
        }

        if(TextUtils.isEmpty(macSerial)){
            macSerial = ((TelephonyManager) context
                    .getApplicationContext()
                    .getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
        }

        if(TextUtils.isEmpty(macSerial)){
            String serial = null;

            String m_szDevIDShort = "35" +
                    Build.BOARD.length()%10+ Build.BRAND.length()%10 +

                    Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +

                    Build.DISPLAY.length()%10 + Build.HOST.length()%10 +

                    Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +

                    Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +

                    Build.TAGS.length()%10 + Build.TYPE.length()%10 +

                    Build.USER.length()%10 ; //13  

            try {
                serial = android.os.Build.class.getField("SERIAL").get(null).toString();
                //API>=9   serial 
                return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
            } catch (Exception exception) {
                //serial       
                serial = "serial"; //        
            }

            //           15   
            macSerial = new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        }
        return macSerial;
    }

    /**
     * sdcard    
     *
     * @return
     */
    public static boolean isSDCardUseful() {
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    }

    /**
     *   App      
     *  onResume/onStop   
     * onStop Activity                
     *
     * @return
     */
    public static boolean isAppForeground() {
//             
//        ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
//        String packageName = getApplicationContext().getPackageName();
//
//        List appProcesses = activityManager
//                .getRunningAppProcesses();
//        if (appProcesses == null)
//            return false;
//
//        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
//            //            
//            // App              ,          ,            
//            if (appProcess.processName.equals(packageName)
//                    && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
//                return true;
//            }
//        }

//            +
//        /**
//         * android.permission.GET_TASKS
//         *  android.permission.GET_TASKS
//         *             ,       ,     getRunningTasks//         *   L  ,        。
//         *               android.permission.REAL_GET_TASKS
//         *                。( Manifest//         *     (     )       。
//         *      
//         */
//        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//        List tasks = am.getRunningTasks(1);
//        if (tasks != null && !tasks.isEmpty()) {
//            ActivityManager.RunningTaskInfo topTask = tasks.get(0);
//            ComponentName topTaskInfo = topTask.topActivity;
//            Log.d("hjq", "top pkg " + topTaskInfo.getPackageName());
//            if (topTaskInfo.getPackageName().equals(context.getPackageName())) {
//                return true;
//            }
//        }

        //         
        int pid = android.os.Process.myPid();
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List processInfos = am.getRunningAppProcesses();
        if (processInfos != null && !processInfos.isEmpty()) {
            for (ActivityManager.RunningAppProcessInfo tmp : processInfos) {
                if (tmp.pid == pid) {
                    //              
                    if (tmp.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                        return true;
                    } else {
                        return false;
                    }
                }
            }
        }

        return false;
    }

    /**
     *          
     * @return
     */
    public static boolean isScreenOn(){
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        boolean isScreenOn = pm.isScreenOn();
        return isScreenOn;
    }

    /**
     *     App
     *
     * @param context
     */
    public static void restartApplication(Context context) {
        PackageManager pm = context.getPackageManager();
        Intent intent = pm.getLaunchIntentForPackage(context.getPackageName());
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
    }

    /**
     *          
     */
    public static class NetWork {

        /**
         *         
         *
         * @return
         */
        public static boolean isNetworkAvailable() {
            /*
             *  mNetworkInfo.isAvailable() mNetworkInfo.isConnected()     
             *  1,       ,      ,           not connect available
             *
             *  2,       ,            ,       connect available
             *
             *  3                                  not connect available
             *
             *  4,    ,     IP                       not connect not available
             *  avalibale             
             */
            if (context != null) {
                ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
                if (mNetworkInfo != null) {
                    return mNetworkInfo.isAvailable();
                }
            }

            return false;
        }

        /**
         *   WIFI      
         *
         * @return
         */
        public static boolean isWifiConnected() {
            if (context != null) {
                ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo mWiFiNetworkInfo = mConnectivityManager
                        .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
                if (mWiFiNetworkInfo != null) {
                    return mWiFiNetworkInfo.isAvailable();
                }
            }
            return false;
        }


        /**
         *   MOBILE      
         *
         * @return
         */
        public static boolean isMobileConnected() {
            if (context != null) {
                ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo mMobileNetworkInfo = mConnectivityManager
                        .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
                if (mMobileNetworkInfo != null) {
                    return mMobileNetworkInfo.isAvailable();
                }
            }
            return false;
        }

        /**
         * 0WIFI  13G  22G  3
         *
         * @return
         */
        public static int getNetworkType() {
            int netType = 0;
            ConnectivityManager connMgr = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo == null) {
                return netType;
            }
            int nType = networkInfo.getType();
            if (nType == ConnectivityManager.TYPE_WIFI) {
                netType = 1;// wifi
            } else if (nType == ConnectivityManager.TYPE_MOBILE) {
                int nSubType = networkInfo.getSubtype();
                TelephonyManager mTelephony = (TelephonyManager) context
                        .getSystemService(Context.TELEPHONY_SERVICE);
                if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS
                        && !mTelephony.isNetworkRoaming()) {
                    netType = 2;// 3G
                } else {
                    netType = 3;// 2G
                }
            }
            return netType;
        }

        /**
         *           
         */
        public static void openWirelessSettings() {
            Intent intent = new Intent("/");
            ComponentName cm = new ComponentName("com.android.settings",
                    "com.android.settings.WirelessSettings");
            intent.setComponent(cm);
            intent.setAction("android.intent.action.VIEW");
            context.startActivity(intent);
        }


        /**
         * mac  
         * android.permission.ACCESS_WIFI_STATE
         */
        public static String getMacAddress() {
            String macSerial = null;
            String str = "";

            try {
                Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address ");
                InputStreamReader ir = new InputStreamReader(pp.getInputStream());
                LineNumberReader input = new LineNumberReader(ir);

                for (; null != str; ) {
                    str = input.readLine();
                    if (str != null) {
                        macSerial = str.trim();//    
                        break;
                    }
                }
            } catch (IOException ex) {
                //      
                ex.printStackTrace();
            }
            return macSerial;
        }

        /**
         *   IP  ,  WIFI     
         *
         * @return
         */
        public static String getMobileIP() {
            //    WIFI  IP  
            String ip = ipFromWifi();

            //  Wifi      WifiIP  
            if (TextUtils.isEmpty(ip)) {
                return ipFromInternet();
            }

            return ip;
        }

        /**
         *   WIFI  IP  
         *
         * @return
         */
        private static String ipFromWifi() {
            //  wifi  
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            //  wifi    
            if (!wifiManager.isWifiEnabled()) {
                return null;
            }
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            int ipAddress = wifiInfo.getIpAddress();
            //     
            return (ipAddress & 0xFF) + "." +
                    ((ipAddress >> 8) & 0xFF) + "." +
                    ((ipAddress >> 16) & 0xFF) + "." +
                    (ipAddress >> 24 & 0xFF);
        }

        /**
         *   Internet  IPInternet    
         * android.permission.INTERNET
         *
         * @return
         */
        private static String ipFromInternet() {
            try {
                for (Enumeration en = NetworkInterface
                        .getNetworkInterfaces(); en.hasMoreElements(); ) {
                    NetworkInterface intf = en.nextElement();
                    for (Enumeration enumIpAddr = intf
                            .getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        if (!inetAddress.isLoopbackAddress()
                                && inetAddress instanceof Inet4Address) {
                            //  IPV4  
                            // if (!inetAddress.isLoopbackAddress() && inetAddress
                            // instanceof Inet6Address) {
                            return inetAddress.getHostAddress().toString();
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    /**
     * App   sha1  
     */
    public static class AppSig {

        /**
         *   App  
         *
         * @return
         */
        public static String getAppSignature() {
            try {
                PackageManager packageManager = context.getPackageManager();
                //     PackageManager.GET_SIGNATURES   flag
                PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(),
                        PackageManager.GET_SIGNATURES);
                Signature[] signs = packageInfo.signatures;
                Signature sign = signs[0];
                // X509X.509            
                CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
                X509Certificate cert = (X509Certificate) certFactory
                        .generateCertificate(new ByteArrayInputStream(sign.toByteArray()));
                // md5
                MessageDigest md = MessageDigest.getInstance("MD5");
                //     
                byte[] b = md.digest(cert.getEncoded());
                //key      
                //.replace(":", "");
                String key = byte2HexFormatted(b);

                return key;
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            } catch (CertificateException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return null;
        }

        /**
         *   app  sha1 
         *
         * @return
         */
        public static String getAppSignSha1() {
            try {
                PackageManager packageManager = context.getPackageManager();
                PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
                // X509X.509            
                Signature[] signs = packageInfo.signatures;
                Signature sign = signs[0];
                CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
                X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(sign.toByteArray()));                    // md5
                MessageDigest md = MessageDigest.getInstance("SHA1");
                //     
                byte[] b = md.digest(cert.getEncoded());
                return byte2HexFormatted(b);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        /**
         *          16    
         *
         * @param arr
         * @return
         */
        private static String byte2HexFormatted(byte[] arr) {
            StringBuilder str = new StringBuilder(arr.length * 2);
            for (int i = 0; i < arr.length; i++) {
                String h = Integer.toHexString(arr[i]);
                int l = h.length();
                if (l == 1)
                    h = "0" + h;
                if (l > 2)
                    h = h.substring(l - 2, l);
                str.append(h.toUpperCase());
                if (i < (arr.length - 1))
                    str.append(':');
            }
            return str.toString();
        }

    }

}