package com.zcy.ghost.vivideo.utils; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.PendingIntent; import android.app.PendingIntent.CanceledException; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.ThumbnailUtils; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.DisplayMetrics; import com.zcy.ghost.vivideo.app.App; import com.zcy.ghost.vivideo.model.bean.AppInfo; import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; /** * Description: 系统工具类 * Creator: yxc * date: 2016/9/7 10:16 */ public class SystemUtils { private static final String TAG = SystemUtils.class.getSimpleName(); /** * 获取系统安装的APP应用 * * @param context */ public static ArrayList<AppInfo> getAllApp(Context context) { PackageManager manager = context.getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> apps = manager.queryIntentActivities(mainIntent, 0); // 将获取到的APP的信息按名字进行排序 Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager)); ArrayList<AppInfo> appList = new ArrayList<AppInfo>(); for (ResolveInfo info : apps) { AppInfo appInfo = new AppInfo(); appInfo.setAppLable(info.loadLabel(manager) + ""); appInfo.setAppIcon(info.loadIcon(manager)); appInfo.setAppPackage(info.activityInfo.packageName); appInfo.setAppClass(info.activityInfo.name); appList.add(appInfo); System.out.println("info.activityInfo.packageName=" + info.activityInfo.packageName); System.out.println("info.activityInfo.name=" + info.activityInfo.name); } return appList; } /** * 获取用户安装的APP应用 * * @param context */ public static ArrayList<AppInfo> getUserApp(Context context) { PackageManager manager = context.getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> apps = manager.queryIntentActivities(mainIntent, 0); // 将获取到的APP的信息按名字进行排序 Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager)); ArrayList<AppInfo> appList = new ArrayList<AppInfo>(); for (ResolveInfo info : apps) { AppInfo appInfo = new AppInfo(); ApplicationInfo ainfo = info.activityInfo.applicationInfo; if ((ainfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { appInfo.setAppLable(info.loadLabel(manager) + ""); appInfo.setAppIcon(info.loadIcon(manager)); appInfo.setAppPackage(info.activityInfo.packageName); appInfo.setAppClass(info.activityInfo.name); appList.add(appInfo); } } return appList; } /** * 根据包名和Activity启动类查询应用信息 * * @param cls * @param pkg * @return */ public static AppInfo getAppByClsPkg(Context context, String pkg, String cls) { AppInfo appInfo = new AppInfo(); PackageManager pm = context.getPackageManager(); Drawable icon; CharSequence label = ""; ComponentName comp = new ComponentName(pkg, cls); try { ActivityInfo info = pm.getActivityInfo(comp, 0); icon = pm.getApplicationIcon(info.applicationInfo); label = pm.getApplicationLabel(pm.getApplicationInfo(pkg, 0)); } catch (NameNotFoundException e) { icon = pm.getDefaultActivityIcon(); } appInfo.setAppClass(cls); appInfo.setAppIcon(icon); appInfo.setAppLable(label + ""); appInfo.setAppPackage(pkg); return appInfo; } /** * 跳转到WIFI设置 * * @param context */ public static void intentWifiSetting(Context context) { if (android.os.Build.VERSION.SDK_INT > 10) { // 3.0以上打开设置界面,也可以直接用ACTION_WIRELESS_SETTINGS打开到wifi界面 context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS)); } else { context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS)); } } /** * WIFI网络开关 */ public static void toggleWiFi(Context context, boolean enabled) { WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); wm.setWifiEnabled(enabled); } /** * 移动网络开关 */ public static void toggleMobileData(Context context, boolean enabled) { ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); Class<?> conMgrClass = null; // ConnectivityManager类 Field iConMgrField = null; // ConnectivityManager类中的字段 Object iConMgr = null; // IConnectivityManager类的引用 Class<?> iConMgrClass = null; // IConnectivityManager类 Method setMobileDataEnabledMethod = null; // setMobileDataEnabled方法 try { // 取得ConnectivityManager类 conMgrClass = Class.forName(conMgr.getClass().getName()); // 取得ConnectivityManager类中的对象mService iConMgrField = conMgrClass.getDeclaredField("mService"); // 设置mService可访问 iConMgrField.setAccessible(true); // 取得mService的实例化类IConnectivityManager iConMgr = iConMgrField.get(conMgr); // 取得IConnectivityManager类 iConMgrClass = Class.forName(iConMgr.getClass().getName()); // 取得IConnectivityManager类中的setMobileDataEnabled(boolean)方法 setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); // 设置setMobileDataEnabled方法可访问 setMobileDataEnabledMethod.setAccessible(true); // 调用setMobileDataEnabled方法 setMobileDataEnabledMethod.invoke(iConMgr, enabled); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } /** * GPS开关 当前若关则打,当前若开则关 */ public static void toggleGPS(Context context) { Intent gpsIntent = new Intent(); gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); gpsIntent.addCategory("android.intent.category.ALTERNATIVE"); gpsIntent.setData(Uri.parse("custom:3")); try { PendingIntent.getBroadcast(context, 0, gpsIntent, 0).send(); } catch (CanceledException e) { e.printStackTrace(); } } /** * 调节系统音量 * * @param context */ public static void holdSystemAudio(Context context) { AudioManager audiomanage = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); // 获取系统最大音量 // int maxVolume = // audiomanage.getStreamMaxVolume(AudioManager.STREAM_MUSIC); // 获取当前音量 int currentVolume = audiomanage.getStreamVolume(AudioManager.STREAM_RING); // 设置音量 audiomanage.setStreamVolume(AudioManager.STREAM_SYSTEM, currentVolume, AudioManager.FLAG_PLAY_SOUND); // 调节音量 // ADJUST_RAISE 增大音量,与音量键功能相同 // ADJUST_LOWER 降低音量 audiomanage.adjustStreamVolume(AudioManager.STREAM_SYSTEM, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); } /** * 设置亮度(每30递增) * * @param activity */ public static void setBrightness(Activity activity) { ContentResolver resolver = activity.getContentResolver(); Uri uri = android.provider.Settings.System.getUriFor("screen_brightness"); int nowScreenBri = getScreenBrightness(activity); nowScreenBri = nowScreenBri <= 225 ? nowScreenBri + 30 : 30; System.out.println("nowScreenBri==" + nowScreenBri); android.provider.Settings.System.putInt(resolver, "screen_brightness", nowScreenBri); resolver.notifyChange(uri, null); } /** * 获取屏幕的亮度 * * @param activity * @return */ public static int getScreenBrightness(Activity activity) { int nowBrightnessValue = 0; ContentResolver resolver = activity.getContentResolver(); try { nowBrightnessValue = android.provider.Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS); } catch (Exception e) { e.printStackTrace(); } return nowBrightnessValue; } /** * 跳转到系统设置 * * @param context */ public static void intentSetting(Context context) { String pkg = "com.android.settings"; String cls = "com.android.settings.Settings"; ComponentName component = new ComponentName(pkg, cls); Intent intent = new Intent(); intent.setComponent(component); context.startActivity(intent); } /** * 获取文件夹下所以的文件 * * @param path * @return */ public static ArrayList<File> getFilesArray(String path) { File file = new File(path); File files[] = file.listFiles(); ArrayList<File> listFile = new ArrayList<File>(); if (files != null) { for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { listFile.add(files[i]); } if (files[i].isDirectory()) { listFile.addAll(getFilesArray(files[i].toString())); } } } return listFile; } /** * 获取视频的缩略图 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图 * 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的,这样会节省内存 * * @param videoPath 视频的路径 * @param width 指定输出视频缩略图的宽度 * @param height 指定输出视频缩略图的高度 * @param kind 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND * 其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96 * @return 指定大小的视频缩略图 */ public static Bitmap getVideoThumbnail(String videoPath, int width, int height, int kind) { Bitmap bitmap = null; // 获取视频的缩略图 bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind); // System.out.println("w"+bitmap.getWidth()); // System.out.println("h"+bitmap.getHeight()); bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); return bitmap; } /** * 打开视频文件 * * @param context * @param file 视频文件 */ public static void intentVideo(Context context, File file) { Intent intent = new Intent(Intent.ACTION_VIEW); String type = "video/*"; Uri uri = Uri.fromFile(file); intent.setDataAndType(uri, type); context.startActivity(intent); } /** * 判断网络是否可用 * <p> * This method requires the caller to hold the permission * {@link android.Manifest.permission#ACCESS_NETWORK_STATE}. * * @param context * @return */ public static boolean checkNet(Context context) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null && info.isAvailable()) { return true; } return false; } /** * 检查是否有可用网络 */ public static boolean isNetworkConnected() { ConnectivityManager connectivityManager = (ConnectivityManager) App.getInstance().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); return connectivityManager.getActiveNetworkInfo() != null; } /** * 网络连接类型 * * @param context * @return */ @SuppressLint("DefaultLocale") public static String getAPN(Context context) { String apn = ""; ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null) { if (ConnectivityManager.TYPE_WIFI == info.getType()) { apn = info.getTypeName(); if (apn == null) { apn = "wifi"; } } else { apn = info.getExtraInfo().toLowerCase(); if (apn == null) { apn = "mobile"; } } } return apn; } public static String getModel(Context context) { return Build.MODEL; } /** * 获取制造商 * * @param context * @return */ public static String getManufacturer(Context context) { return Build.MANUFACTURER; } /** * 获取固件版本 * * @param context * @return */ public static String getFirmware(Context context) { return Build.VERSION.RELEASE; } /** * 获取SDK版本 * * @return */ public static String getSDKVer() { return Integer.valueOf(Build.VERSION.SDK_INT).toString(); } /** * 获取当前语言 * * @return */ public static String getLanguage() { Locale locale = Locale.getDefault(); String languageCode = locale.getLanguage(); if (TextUtils.isEmpty(languageCode)) { languageCode = ""; } return languageCode; } /** * 获取国家代码 * * @return */ public static String getCountry() { Locale locale = Locale.getDefault(); String countryCode = locale.getCountry(); if (TextUtils.isEmpty(countryCode)) { countryCode = ""; } return countryCode; } /** * 获取imei * * @param context * @return */ public static String getIMEI(Context context) { TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imei = mTelephonyMgr.getDeviceId(); if (TextUtils.isEmpty(imei) || imei.equals("000000000000000")) { imei = "0"; } return imei; } /** * getIMSI</br> Requires Permission: * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * * @param context * @return */ public static String getIMSI(Context context) { TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imsi = mTelephonyMgr.getSubscriberId(); if (TextUtils.isEmpty(imsi)) { return "0"; } else { return imsi; } } /** * 获取当前网络类型 * * @param context * @return */ public static String getMcnc(Context context) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String mcnc = tm.getNetworkOperator(); if (TextUtils.isEmpty(mcnc)) { return "0"; } else { return mcnc; } } /** * 获取<meta-data>元素的数据 * * @param context * @param keyName * @return */ public static Object getMetaData(Context context, String keyName) { try { ApplicationInfo info = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); Bundle bundle = info.metaData; Object value = bundle.get(keyName); return value; } catch (NameNotFoundException e) { e.printStackTrace(); } return ""; } /** * 获取App版本 * * @param context * @return */ public static String getAppVersion(Context context) { PackageManager pm = context.getPackageManager(); PackageInfo pi; try { pi = pm.getPackageInfo(context.getPackageName(), 0); String versionName = pi.versionName; return versionName; } catch (NameNotFoundException e) { e.printStackTrace(); } return ""; } /** * 获取注册号码 * * @param context * @return */ public static String getSerialNumber(Context context) { String serial = null; try { Class<?> c = Class.forName("android.os.SystemProperties"); Method get = c.getMethod("get", String.class); serial = (String) get.invoke(c, "ro.serialno"); if (serial == null || serial.trim().length() <= 0) { TelephonyManager tManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); serial = tManager.getDeviceId(); } KL.d(SystemUtils.class, "Serial:" + serial); } catch (Exception ignored) { ignored.printStackTrace(); } return serial; } /** * 判断SD卡是否存 * * @return */ public static boolean getSDcard() { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { return true; } return false; } /** * 判断当前应用程序处于前台还是后台 */ public static boolean isApplicationBroughtToBackground(final Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); @SuppressWarnings("deprecation") List<RunningTaskInfo> tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; if (!topActivity.getPackageName().equals(context.getPackageName())) { return true; } } return false; } /** * 获取屏幕像素 * * @param activity * @return */ public static String screenSize(Activity activity) { DisplayMetrics mDisplayMetrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics); int W = mDisplayMetrics.widthPixels; int H = mDisplayMetrics.heightPixels; return H + "x" + W; } /** * 获取当前网络连接类型 * * @param mContext * @return */ public static String GetNetworkType(Context mContext) { String strNetworkType = ""; ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) { strNetworkType = "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 // 11 strNetworkType = "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 = "3G"; break; case TelephonyManager.NETWORK_TYPE_LTE: // api<11 : replace by // 13 strNetworkType = "4G"; break; default: // http://baike.baidu.com/item/TD-SCDMA 中国移动 联通 电信 三种3G制式 if (_strSubTypeName.equalsIgnoreCase("TD-SCDMA") || _strSubTypeName.equalsIgnoreCase("WCDMA") || _strSubTypeName.equalsIgnoreCase("CDMA2000")) { strNetworkType = "3G"; } else { strNetworkType = _strSubTypeName; } break; } } } return strNetworkType; } /** * @param activity * @return > 0 success; <= 0 fail */ public static int getStatusHeight(Activity activity) { int statusHeight = 0; Rect localRect = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect); statusHeight = localRect.top; if (0 == statusHeight) { Class<?> localClass; try { localClass = Class.forName("com.android.internal.R$dimen"); Object localObject = localClass.newInstance(); int i5 = Integer.parseInt(localClass.getField("status_bar_height").get(localObject).toString()); statusHeight = activity.getResources().getDimensionPixelSize(i5); } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | IllegalArgumentException | SecurityException | NoSuchFieldException e) { e.printStackTrace(); } } return statusHeight; } }