應用存活
public static boolean isAppAlive() {
String pName = GlobalContext.getPackageName();
int uid = getPackageUid(GlobalContext.getAppContext(), GlobalContext.getPackageName());
if (uid > 0) {
boolean rstA = isAppRunning(GlobalContext.getAppContext(), pName);
boolean rstB = isProcessRunning(GlobalContext.getAppContext(), uid);
Log.i(TAG, "isAppAlive: " + (rstA || rstB) + " pName :" + pName + " rstA :" + rstA + " rstB: " + rstB);
if (rstA || rstB) {
//指定包名的程序正在運行中
return true;
} else {
//指定包名的程序未在運行中
return false;
}
} else {
//應用未安裝
return false;
}
}
/**
* 方法描述:判斷某一應用是否正在運行
*
* @param context 上下文
* @param packageName 應用的包名
* @return true 表示正在運行,false 表示沒有運行
*/
public static boolean isAppRunning(Context context, String packageName) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
if (list.size() <= 0) {
return false;
}
for (ActivityManager.RunningTaskInfo info : list) {
if (info.baseActivity.getPackageName().equals(packageName)) {
return true;
}
}
return false;
}
//獲取已安裝應用的 uid,-1 表示未安裝此應用或程序異常
public static int getPackageUid(Context context, String packageName) {
try {
ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(packageName, 0);
if (applicationInfo != null) {
return applicationInfo.uid;
}
} catch (Exception e) {
return -1;
}
return -1;
}
/**
* 判斷某一 uid 的程序是否有正在運行的進程,即是否存活
*
* @param context 上下文
* @param uid 已安裝應用的 uid
* @return true 表示正在運行,false 表示沒有運行
*/
public static boolean isProcessRunning(Context context, int uid) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> runningServiceInfos = am.getRunningServices(200);
if (runningServiceInfos.size() > 0) {
for (ActivityManager.RunningServiceInfo appProcess : runningServiceInfos) {
if (uid == appProcess.uid) {
return true;
}
}
}
return false;
}