package com.yuyh.library.utils; 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.ResolveInfo; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.widget.Toast; import com.yuyh.library.AppUtils; import java.io.File; import java.util.List; import java.util.Map; /** * @author yuyh. * @date 16/4/9. */ public class PackageUtils { /** * 检查当前应用是否有某项权限 * * @param permName 权限名称 * @return */ public static boolean checkPermission(String permName) { return checkPermission(permName, AppUtils.getAppContext().getPackageName()); } /** * 检查包名所在的程序是否有某项权限 * * @param permName 权限名称 * @param pkgName 程序所在的包名 * @return */ public static boolean checkPermission(String permName, String pkgName) { PackageManager pm = AppUtils.getAppContext().getPackageManager(); try { boolean isHave = (PackageManager.PERMISSION_GRANTED == pm.checkPermission(permName, pkgName)); return isHave; } catch (Exception e) { e.printStackTrace(); } return false; } /** * 获取App包 信息版本号 * * @param context * @return */ public static PackageInfo getPackageInfo(Context context) { PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = null; try { packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return packageInfo; } public static int getAppVersionCode(Context context) { PackageInfo pi = getPackageInfo(context); return pi == null ? -1 : pi.versionCode; } public static String getAppVersionName(Context context) { PackageInfo pi = getPackageInfo(context); return pi == null ? "" : pi.versionName; } /** * 调用系统安装应用 */ public static boolean install(Context context, File file) { if (file == null || !file.exists() || !file.isFile()) { return false; } Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); return true; } /** * 调用系统卸载应用 */ public static void uninstallApk(Context context, String packageName) { Intent intent = new Intent(Intent.ACTION_DELETE); Uri packageURI = Uri.parse("package:" + packageName); intent.setData(packageURI); context.startActivity(intent); } /** * 打开已安装应用的详情 */ public static void goToInstalledAppDetails(Context context, String packageName) { Intent intent = new Intent(); int sdkVersion = Build.VERSION.SDK_INT; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.fromParts("package", packageName, null)); } else { intent.setAction(Intent.ACTION_VIEW); intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); intent.putExtra((sdkVersion == Build.VERSION_CODES.FROYO ? "pkg" : "com.android.settings.ApplicationPkgName"), packageName); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } /** * 调用系统分享 */ public static void shareToOtherApp(Context context, String title, String content, String dialogTitle) { Intent intentItem = new Intent(Intent.ACTION_SEND); intentItem.setType("text/plain"); intentItem.putExtra(Intent.EXTRA_SUBJECT, title); intentItem.putExtra(Intent.EXTRA_TEXT, content); intentItem.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(Intent.createChooser(intentItem, dialogTitle)); } /** * 判断是否前台运行 * 须配置android.permission.GET_TASKS权限 * * @param context * @return */ public static boolean isRunningForeground(Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> taskList = am.getRunningTasks(1); if (taskList != null && !taskList.isEmpty()) { ComponentName componentName = taskList.get(0).topActivity; if (componentName != null && componentName.getPackageName().equals(context.getPackageName())) { return true; } } return false; } /** * 判断是否是系统应用 * * @param context * @return */ public static boolean isSystemApplication(Context context) { if (context == null) { return false; } return isSystemApplication(context, context.getPackageName()); } /** * 判断是否是系统应用 * * @param context * @param packageName * @return */ public static boolean isSystemApplication(Context context, String packageName) { PackageManager packageManager = context.getPackageManager(); if (packageManager == null || packageName == null || packageName.length() == 0) { return false; } try { ApplicationInfo app = packageManager.getApplicationInfo(packageName, 0); return (app != null && (app.flags & ApplicationInfo.FLAG_SYSTEM) > 0); } catch (Exception e) { e.printStackTrace(); } return false; } /** * 获取指定程序应用信息 * * @param context * @param pkg * @return */ public static ApplicationInfo getApplicationInfo(Context context, String pkg) { try { return context.getPackageManager().getApplicationInfo(pkg, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return null; } /** * 获取指定程序包信息 * * @param context * @param pkg * @return */ public static PackageInfo getPackageInfo(Context context, String pkg) { try { return context.getPackageManager().getPackageInfo(pkg, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return null; } /** * 获取已安装的全部应用信息 * * @param context * @return */ public static List<PackageInfo> getInsatalledPackages(Context context) { return context.getPackageManager().getInstalledPackages(0); } /** * 检测应用是否安装 * * @param context * @param pkg * @return */ public static boolean isInsatalled(Context context, String pkg) { if (!CheckUtils.isEmpty(pkg)) { List<PackageInfo> list = getInsatalledPackages(context); if (!CheckUtils.isEmpty(list)) { for (PackageInfo pi : list) { if (pkg.equalsIgnoreCase(pi.packageName)) { return true; } } } } return false; } /** * 通过包名启动某个应用 * * @param context * @param packageName * @return */ public static boolean startAppByPackageName(Context context, String packageName) { return startAppByPackageName(context, packageName, null); } /** * 通过包名启动某个应用 带参数 * * @param context * @param packageName * @param param * @return */ public static boolean startAppByPackageName(Context context, String packageName, Map<String, String> param) { android.content.pm.PackageInfo pi = null; try { pi = context.getPackageManager().getPackageInfo(packageName, 0); Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.DONUT) { resolveIntent.setPackage(pi.packageName); } List<ResolveInfo> apps = context.getPackageManager().queryIntentActivities(resolveIntent, 0); ResolveInfo ri = apps.iterator().next(); if (ri != null) { String packageName1 = ri.activityInfo.packageName; String className = ri.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(packageName1, className); intent.setComponent(cn); if (param != null) { for (Map.Entry<String, String> en : param.entrySet()) { intent.putExtra(en.getKey(), en.getValue()); } } context.startActivity(intent); return true; } } catch (Exception e) { e.printStackTrace(); Toast.makeText(context.getApplicationContext(), "启动失败", Toast.LENGTH_LONG).show(); } return false; } }