**
前言:
仅为总结,以备不时之需。
**
**
一、判断Activity是否在运行
**
注意:am.getRunningTasks(1)可以获得当前运行的task数量,设置为1则可以判断当前Activity是否正在前台运行,如果设置task数量很大时可以判断Activity是否已经已经finish
/**
* 判断某个界面是否在前台
*
* @param context
* @param className 某个界面名称
*/
public static boolean isForeground(Context context, String className) {
if (context == null || TextUtils.isEmpty(className)) {
return false;
}
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
if (list != null && list.size() > 0) {
ComponentName cpn = list.get(0).topActivity;
if (className.equals(cpn.getClassName())) {
return true;
}
}
return false;
}
}
**
二、判断App是否正在运行
**
public boolean isAppOnForeground() {
ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = mContext.getPackageName();
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
if (appProcesses == null)
return false;
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
// The name of the process that this object is associated with.
if (appProcess.processName.equals(packageName)
&& appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
**
三、判断应用是否安装
**
共有两种方法:
方法一:利用uri判断App是否安装
private boolean isAppInstalled(Context context, String uri) {
PackageManager pm = context.getPackageManager();
boolean installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
installed = true;
} catch (PackageManager.NameNotFoundException e) {
installed = false;
}
return installed;
}
方法二:利用包名判断App是否安装
public boolean isAppInstalled(Context context, String packageName) {
final PackageManager packageManager = context.getPackageManager();
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
List<String> pName = new ArrayList<String>();
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);
}
如果想通过这个方法来判断并跳转至其他应用,可以利用Intent和ComponentName来进行跳转。
注意:这个包名是假的,需要传真实的应用的包名
//已安装,打开程序,
if(isAppInstalled(this, "com.android.demo")){
Intent i = new Intent();
ComponentName cn = new ComponentName("com.android.demo",
"com.android.demo.MainActivity");
i.setComponent(cn);
startActivityForResult(i, RESULT_OK);
}
//未安装,跳转至market下载该程序
else {
Uri uri = Uri.parse("market://details?id=com.android.demo");//id为包名
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}