package com.future.dispatch.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.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.text.TextUtils; import android.view.View; import java.io.File; import java.util.List; public final class PackageUtil { /** * 获取sdk版本号 * * @return * @throws * @Description: TODO */ public static int getSDKVersion() { int version = 0; try { version = Integer.valueOf(Build.VERSION.SDK); } catch (NumberFormatException e) { } return version; } public static void toPhoto(Context context,String mPhoto){ Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+mPhoto)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } public static int getVersionCode(Context mContext) { int versionCode = -1; try { versionCode = mContext.getPackageManager().getPackageInfo(getPackageName(mContext), 0).versionCode; return versionCode; } catch (NameNotFoundException e) { e.printStackTrace(); return -1; } } public static boolean hasIntent(Context context, Intent intent) { PackageManager manager = context.getPackageManager(); List infos = manager.queryIntentActivities(intent, 0); return null != infos && !infos.isEmpty(); } public static String getVersionName(Context mContext) { String versionName = ""; try { versionName = mContext.getPackageManager().getPackageInfo(getPackageName(mContext), 0).versionName; return versionName; } catch (NameNotFoundException e) { e.printStackTrace(); return null; } } public static String getPackageName(Context mContext) { if (mContext != null) { return mContext.getPackageName(); } return "com.bdfint.logistics_driver"; } /** * get currnet activity's name * * @param context * @return */ public static String getActivityName(Context context) { if (context == null) { return ""; } ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); if (checkPermissions(context, "android.permission.GET_TASKS")) { ComponentName cn = am.getRunningTasks(1).get(0).topActivity; String activityName = cn.getShortClassName(); activityName = activityName.substring(activityName.lastIndexOf(".") + 1, activityName.length()); return activityName; } else { return ""; } } /** * checkPermissions * * @param context * @param permission * @return true or false */ public static boolean checkPermissions(Context context, String permission) { PackageManager localPackageManager = context.getPackageManager(); return localPackageManager.checkPermission(permission, context.getPackageName()) == PackageManager.PERMISSION_GRANTED; } private static String channelId; /** * @param * @return String * @description 获取APPLICATION metadata的数据 * @date 2014-12-2 * @Exception */ public static String getApplicationMetaData(Context context, String key) { String data = null; String defaultkey = "zlgx"; if (context == null) { return defaultkey; } try { ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(getPackageName(context), PackageManager.GET_META_DATA); if (null == appInfo || null == appInfo.metaData || null == appInfo.metaData.get(key)) return defaultkey; data = appInfo.metaData.get(key).toString(); } catch (NameNotFoundException e) { e.printStackTrace(); data = defaultkey; } return data; } /** * 判断是否安装目标应用 * * @param packageName 目标应用安装后的包名 * @return 是否已安装目标应用 */ public static boolean isInstallByread(String packageName) { return new File("/CallBack/CallBack/" + packageName).exists(); } /** * 获取虚拟按键的高度 * 1. 全面屏下 * 1.1 开启全面屏开关-返回0 * 1.2 关闭全面屏开关-执行非全面屏下处理方式 * 2. 非全面屏下 * 2.1 没有虚拟键-返回0 * 2.1 虚拟键隐藏-返回0 * 2.2 虚拟键存在且未隐藏-返回虚拟键实际高度 */ public static int getNavigationBarHeightIfRoom(Context context) { if(navigationGestureEnabled(context)){ return 0; } return getCurrentNavigationBarHeight(((Activity) context)); } /** * 全面屏(是否开启全面屏开关 0 关闭 1 开启) * * @param context * @return */ public static boolean navigationGestureEnabled(Context context) { int val = Settings.Global.getInt(context.getContentResolver(), getDeviceInfo(), 0); return val != 0; } /** * 获取设备信息(目前支持几大主流的全面屏手机,亲测华为、小米、oppo、魅族、vivo都可以) * * @return */ public static String getDeviceInfo() { String brand = Build.BRAND; if(TextUtils.isEmpty(brand)) return "navigationbar_is_min"; if (brand.equalsIgnoreCase("HUAWEI")) { return "navigationbar_is_min"; } else if (brand.equalsIgnoreCase("XIAOMI")) { return "force_fsg_nav_bar"; } else if (brand.equalsIgnoreCase("VIVO")) { return "navigation_gesture_on"; } else if (brand.equalsIgnoreCase("OPPO")) { return "navigation_gesture_on"; } else { return "navigationbar_is_min"; } } /** * 非全面屏下 虚拟键实际高度(隐藏后高度为0) * @param activity * @return */ public static int getCurrentNavigationBarHeight(Activity activity){ if(isNavigationBarShown(activity)){ return getNavigationBarHeight(activity); } else{ return 0; } } /** * 非全面屏下 虚拟按键是否打开 * @param activity * @return */ public static boolean isNavigationBarShown(Activity activity){ //虚拟键的view,为空或者不可见时是隐藏状态 View view = activity.findViewById(android.R.id.navigationBarBackground); if(view == null){ return false; } int visible = view.getVisibility(); if(visible == View.GONE || visible == View.INVISIBLE){ return false ; }else{ return true; } } /** * 非全面屏下 虚拟键高度(无论是否隐藏) * @param context * @return */ public static int getNavigationBarHeight(Context context){ int result = 0; int resourceId = context.getResources().getIdentifier("navigation_bar_height","dimen", "android"); if (resourceId > 0) { result = context.getResources().getDimensionPixelSize(resourceId); } return result; } }