任何一个APP开发,都可以用到的工具类!ApiUtils

/**
 * Created by 马占柱 on 2018/07/31.
 */

public class ApiUtils {
    private final int PHONE = 0;//手机号验证
    private final int HANZI = 1;//中文、数字或字母
    public static String title = "title";
    public static String time = "time";
    public static String url = "url";
    public static String type = "type";
    public static String LIST = "LIST";
    public static String count = "count";

    /**
     * MD5加密
     */
    public static String md5(String string) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("Huh, MD5 should be supported?", e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Huh, UTF-8 should be supported?", e);
        }
        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10) {
                hex.append("0");
            }
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString();
    }

    //获取起机器
    public static String getAndroid_id(Context context) {
        try {
            String id = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
            return id;
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 获取版本名称
     */
    public static String getVersionName(Context context) throws Exception {
        // 获取packagemanager的实例
        PackageManager packageManager = context.getPackageManager();
        // getPackageName()是你当前类的包名,0代表是获取版本信息
        PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
        return packInfo.versionName;
    }

    /**
     * 获取当前版本号
     */
    public static int getVersionCode(Context context) throws Exception {
        // 包管理器 可以获取manifest文件里的信息
        PackageManager packageManager = context.getPackageManager();
        // 获取包信息 参1 包名 参2 flags 不同的flag获取不同的额外信息 不需要就写0
        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(
                    context.getPackageName(), 0);
            return packageInfo.versionCode;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 得到安装的intent
     *
     * @param apkFile 。
     * @return 。
     */
    public static Intent getInstallIntent(File apkFile) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(apkFile.getAbsolutePath())),
                "application/vnd.android.package-archive");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        return intent;
    }

    /**
     * 获取当前手机系统语言。
     *
     * @return 返回当前系统语言。例如:当前设置的是“中文-中国”,则返回“zh-CN”
     */
    public static String getSystemLanguage() {
        return Locale.getDefault().getLanguage();
    }

    /**
     * 获取当前系统上的语言列表(Locale列表)
     *
     * @return 语言列表
     */
    public static Locale[] getSystemLanguageList() {
        return Locale.getAvailableLocales();
    }

    /**
     * 获取手机型号
     *
     * @return 手机型号
     */
    public static String getSystemModel() {
        return android.os.Build.MODEL;
    }

    /**
     * 获取手机厂商
     *
     * @return 手机厂商
     */
    public static String getDeviceBrand() {
        return android.os.Build.BRAND;
    }

    /**
     * 正则表达式
     *
     * @param phone 手机号
     * @param state 0手机号   1中文、数字或字母
     * @return 返回
     */
    public boolean isPhone(String phone, int state) {
        if (state == PHONE) {
            telRegex = "0?(13|14|15|18|17|16|19)[0-9]{9}";
        } else if (state == HANZI) {
            telRegex = "[A-Za-z0-9_-\\u4e00-\\u9fa5]+";
        }
        if (TextUtils.isEmpty(phone)) {
            return false;
        } else {
            return phone.matches(telRegex);
        }

    }

    /**
     * 卸载一个app
     */
    public static void uninstall(Context context, String packageName) {
        // 通过程序的包名创建URI
        Uri packageURI = Uri.parse("package:" + packageName);
        // 创建Intent意图
        Intent intent = new Intent(Intent.ACTION_DELETE, packageURI);
        // 执行卸载程序
        context.startActivity(intent);
    }

    /**
     * 静默卸载 仅限特定设备使用
     *
     * @param context
     * @param packageName
     */
    public static void uninstallSilent(Context context, String packageName) {
        try {
            // ToastShow.shortMessage("uninstallSilent");
            Uri uri = Uri.parse("package:" + packageName);
            Intent installintent = new Intent("android.intent.action.SECURE_UNINSTALL_PACKAGE");
            installintent.addCategory(Intent.CATEGORY_DEFAULT);
            installintent.setData(uri);
            installintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(installintent);
        } catch (Exception e) {
            e.printStackTrace();
            uninstall(context, packageName);
        }
    }

    /**
     * 根据包名获取安装的应用的版本号
     *
     * @param context
     * @param packageName
     * @return
     */
    public static int getVersionCode(Context context, String packageName) {
        try {
            return context.getPackageManager().getPackageInfo(packageName, 0).versionCode;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 判断手机是否已经安装了,指定包名和版本号的应用
     *
     * @return
     */
    public static boolean isInstalled(Context context, String packageName, int versionCode) {
        try {
            PackageInfo packageInfo = context.getApplicationContext().getPackageManager().getPackageInfo(packageName, 0);
            if (isAvailable(context, packageName) && packageInfo.versionCode == versionCode) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return false;
    }

    /**
     * 检查手机上是否安装了指定包名的软件
     */
    public static boolean isAvailable(Context context, String packageName) {
        // 获取packagemanager
        final PackageManager packageManager = context.getApplicationContext().getPackageManager();
        // 获取所有已安装程序的包信息
        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
        // 用于存储所有已安装程序的包名
        List<String> packageNames = new ArrayList<>();
        // 从pinfo中将包名字逐一取出,压入pName list中
        if (packageInfos != null) {
            for (int i = 0; i < packageInfos.size(); i++) {
                String packName = packageInfos.get(i).packageName;
                packageNames.add(packName);
            }
        }
        // 判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
        return packageNames.contains(packageName);
    }

    /**
     * 根据文件路径获取包名
     */
    public static String getPackageName(Context context, String filePath) {
        PackageManager packageManager = context.getApplicationContext().getPackageManager();
        PackageInfo info = packageManager.getPackageArchiveInfo(filePath, PackageManager.GET_ACTIVITIES);
        if (info != null) {
            ApplicationInfo appInfo = info.applicationInfo;
            return appInfo.packageName; // 得到安装包名称
        }
        return null;
    }

    /**
     * 从apk中获取版本信息
     */
    @SuppressLint("NewApi")
    public static String getChannelFromApk(Context context, String channelPrefix) {
        // 从apk包中获取
        ApplicationInfo appinfo = context.getApplicationContext().getApplicationInfo();
        String sourceDir = appinfo.sourceDir;
        // 默认放在meta-inf/里, 所以需要再拼接一下
        String key = "META-INF/" + channelPrefix;
        String ret = "";
        ZipFile zipfile = null;
        try {
            zipfile = new ZipFile(sourceDir);
            Enumeration<?> entries = zipfile.entries();
            while (entries.hasMoreElements()) {
                ZipEntry entry = ((ZipEntry) entries.nextElement());
                String entryName = entry.getName();
                if (entryName.startsWith(key)) {
                    ret = entryName;
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (zipfile != null) {
                try {
                    zipfile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        String[] split = ret.split(channelPrefix);
        String channel = "";
        if (split.length >= 2) {
            channel = ret.substring(key.length());
        }
        return channel;
    }

    /**
     * 打开app
     *
     * @param context
     * @param packageName
     * @return
     */
    public static boolean openPackage(Context context, String packageName) {
        Context pkgContext = getPackageContext(context.getApplicationContext(), packageName);
        Intent intent = getAppOpenIntentByPackageName(context, packageName);
        if (pkgContext != null && intent != null) {
            pkgContext.startActivity(intent);
            return true;
        }
        return false;
    }

    /**
     * 打开app
     *
     * @param context
     * @param packageName
     * @param activity    三方app对应的启动activity路径
     * @return
     */
    public static boolean openPackage(Context context, String packageName, String activity) {
        Context pkgContext = getPackageContext(context.getApplicationContext(), packageName);
        Intent intent = new Intent();
        // a应用启动b应用
        ComponentName cn = new ComponentName(packageName, activity);
        intent.setComponent(cn);
        Uri uri = Uri.parse(packageName);// 此处应与B程序中Data中标签一致
        intent.setData(uri);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (pkgContext != null && intent != null) {
            pkgContext.startActivity(intent);
            return true;
        }
        return false;
    }

    /**
     * 根据包名获取程序 图标
     *
     * @param context
     * @param pkgName
     * @return
     */
    public static Drawable getAppIcon(Context context, String pkgName) {
        try {
            ApplicationInfo info = context.getApplicationContext().getPackageManager().getApplicationInfo(pkgName, 0);
            return info.loadIcon(context.getPackageManager());
        } catch (Exception e) {
            e.printStackTrace();

        }
        return null;
    }
}

猜你喜欢

转载自blog.csdn.net/fengyeNom1/article/details/81311132