package com.ouwenjie.note.utils; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Handler; import android.os.Vibrator; import java.util.List; /** * 系统级常用方法 * 1、检测某个intent是否可用 * 2、检测设备是否安装了GooglePlay\mobileQQ\weChat\BaiduMap\ ?? * 3、检测某个类是否可用 * 4、跳转到应用市场 * 5、检测某个服务是否正在执行 * 6、检测本应用是否处于可见状态 * 7、震动 * * Created by 文杰 on 2015/4/2. */ public class SysUtils { private static SysUtils sysUtils; private Context mContext; private PackageManager packageManager; private SysUtils(Context cxt) { this.mContext = cxt; this.packageManager = mContext.getPackageManager(); } public static SysUtils getInstance(Context cxt) { if (null == sysUtils) { sysUtils = new SysUtils(cxt); } return sysUtils; } /** * 查询某个 Action 是否可用 * * @param action * @return */ public boolean isIntentAvailable(String action) { Intent intent = new Intent(action); return isIntentAvailable(intent); } /** * 查询带参数的 Action 是否可用 * * @param action * @param URIs * @return */ public boolean isIntentAvailable(String action, String URIs) { Intent intent = new Intent(action, Uri.parse(URIs)); return isIntentAvailable(intent); } /** * 检测某个intent是否可用 * * @param intent * @return */ public boolean isIntentAvailable(Intent intent) { List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } /** * 检测Google Play是否可用 */ public boolean hasGooglePlayInstalled() { return hasInstalledPackage("com.android.vending"); } /** * 是否已经安装了微信应用 * * @return */ public boolean hasWechatInstalled() { return hasInstalledPackage("com.tencent.mm"); } /** * 是否已经安装了QQ应用 * * @return */ public boolean hasQQInstalled() { return hasInstalledPackage("com.tencent.mobileqq"); } /** * 是否已经安装了百度地图应用 * * @return */ public boolean hasBaiduMapInstalled() { return hasInstalledPackage("com.baidu.BaiduMap"); } /** * 查询是否安装了某个包 * * @param packageName * @return */ public boolean hasInstalledPackage(String packageName) { List<PackageInfo> list = packageManager.getInstalledPackages(0); if (null == list || list.size() == 0) return false; for (PackageInfo info : list) { if (info.packageName.equals(packageName)) return true; } return false; } /** * 检查所支持的类 * * @param className * 类的名称 * @return 支持返回true,否则false */ public static boolean isClassAvailable(String className) { try { Class.forName(className); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } return true; } /** * 跳转到应用市场的本应用的页面 * */ public void goMarket() { String strUri = "market://details?id=" + mContext.getPackageName(); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(strUri)); if (isIntentAvailable(intent)) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); } else { // "很抱歉,调用电子市场失败" } } /** * * 判断某个服务是否正在执行 * * @param cxt * @param serviceName * @return */ public boolean isServiceRunning(Context cxt, String serviceName) { if (null == cxt || null == serviceName || "".equals(serviceName)) return false; ActivityManager mActivityManager; List<ActivityManager.RunningServiceInfo> mServiceList; mActivityManager = (ActivityManager) cxt .getSystemService(Context.ACTIVITY_SERVICE); mServiceList = mActivityManager.getRunningServices(30); if (null != mServiceList && !mServiceList.isEmpty()) { for (int i = 0; i < mServiceList.size(); i++) { if (serviceName.equals(mServiceList.get(i).service .getClassName())) { return true; } } } return false; } /** * 本应用是否为当前可视状态 * * @param cxt * @return */ public boolean isTopActivity(Context cxt) { String packageName = null; ActivityManager am; List<ActivityManager.RunningTaskInfo> tasksInfo; packageName = cxt.getPackageName(); if (null != packageName) { am = (ActivityManager) cxt .getSystemService(Context.ACTIVITY_SERVICE); tasksInfo = am.getRunningTasks(2); if (tasksInfo.size() > 0) { if (packageName.equals(tasksInfo.get(0).topActivity .getPackageName())) { // 应用程序位于堆栈的顶层 return true; } } } return false; } /** * 震动(隔100ms,然后震动400ms) */ public void vibrate() { long[] pattern = { 100, 400 }; // 震动时间(停止 开启) final Vibrator vibrator; vibrator = (Vibrator) mContext .getSystemService(Context.VIBRATOR_SERVICE); // 震动服务 vibrator.vibrate(pattern, -1); // 震动一次 new Handler().postDelayed(new Runnable() { @Override public void run() { vibrator.cancel(); } }, 500); } }