package com.mcxiaoke.next.utils;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import java.util.List;
/**
* User: mcxiaoke
* Date: 15/5/12
* Time: 10:11
*/
public final class PackageUtils {
private static final String TAG = PackageUtils.class.getSimpleName();
public static boolean isAppInstalled(final Context context, final String packageName) {
try {
final PackageManager pm = context.getPackageManager();
final PackageInfo info = pm.getPackageInfo(packageName, 0);
return info != null;
} catch (NameNotFoundException e) {
return false;
}
}
public static boolean isMainProcess(final Context context) {
ActivityManager am = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE));
List<RunningAppProcessInfo> processes = am.getRunningAppProcesses();
String mainProcessName = context.getPackageName();
int myPid = android.os.Process.myPid();
for (RunningAppProcessInfo info : processes) {
if (info.pid == myPid && mainProcessName.equals(info.processName)) {
return true;
}
}
return false;
}
public static boolean isServiceRunning(Context context, Class<?> cls) {
final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningServiceInfo> services = am.getRunningServices(Integer.MAX_VALUE);
final String className = cls.getName();
for (RunningServiceInfo service : services) {
if (className.equals(service.service.getClassName())) {
return true;
}
}
return false;
}
public static boolean isAppRunning(final Context context, final String packageName) {
final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningAppProcessInfo> apps = am.getRunningAppProcesses();
if (apps == null || apps.isEmpty()) {
return false;
}
for (RunningAppProcessInfo app : apps) {
if (packageName.equals(app.processName)) {
return true;
}
}
return false;
}
public static PackageInfo getCurrentPackageInfo(final Context context) {
final PackageManager pm = context.getPackageManager();
try {
return pm.getPackageInfo(context.getPackageName(), PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
return null;
}
}
public static PackageInfo getPackageInfo(final Context context, final String packageName) {
final PackageManager pm = context.getPackageManager();
try {
return pm.getPackageInfo(packageName, PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
return null;
}
}
public static boolean isDisabled(Context context, Class<?> clazz) {
ComponentName componentName = new ComponentName(context, clazz);
PackageManager pm = context.getPackageManager();
return pm.getComponentEnabledSetting(componentName)
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
}
public static boolean isEnabled(Context context, Class<?> clazz) {
ComponentName componentName = new ComponentName(context, clazz);
PackageManager pm = context.getPackageManager();
return pm.getComponentEnabledSetting(componentName)
!= PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
}
public static void enableComponent(Context context, Class<?> clazz) {
setComponentState(context, clazz, true);
}
public static void disableComponent(Context context, Class<?> clazz) {
setComponentState(context, clazz, false);
}
public static void setComponentState(Context context, Class<?> clazz, boolean enable) {
ComponentName componentName = new ComponentName(context, clazz);
PackageManager pm = context.getPackageManager();
final int oldState = pm.getComponentEnabledSetting(componentName);
final int newState = enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
if (newState != oldState) {
final int flags = PackageManager.DONT_KILL_APP;
pm.setComponentEnabledSetting(componentName, newState, flags);
}
}
}