最近涉及的知识很多是做app的统计的,既然是统计,无外乎是统计自己的行为和其他app的行为。
对用到的activity service package 的操作和管理写了个工具类,部分是copy别人的。以前的代码无法写出是哪里来的了就无从考证了。如果被发现会标上去的
package com.tv.ui.metro.utils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
/**
* 对package,activity,service的一些判断
*
* @author liw
*
*/
public class ManagerUtil {
/**
* 指定service的运行状态
*
* @param context
* @return
*/
public static boolean isServiceRunning(Context context, String serviceName) {
if (serviceName == null) {
return false;
}
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceName.equals(service.service.getClassName())) {
return true;
}
}
return false;
}
/**
* 获取前台进程的应用包名(一般都不止一个,目前知道的顺序不可预知)
*
* @param context
* @return
*/
public static List
getCurrentAppPackageName(Context context) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List
list = new ArrayList
();
try {
List
appProcessList = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessList) {
if (appProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
list.add(appProcessInfo.processName);
// LogDebugUtil.d("lee", new Date().toLocaleString() + " foreground " + appProcessInfo.processName);
}
}
} catch (Exception e) {
}
return list;
}
/**
* 运行在眼里的包名 deprecated in api 21
*
* @param context
* @return
*/
@Deprecated
public static String getTopActivityName(Context context) {
String topActivityClassName = null;
ActivityManager activityManager = (ActivityManager) (context
.getSystemService(android.content.Context.ACTIVITY_SERVICE));
List
runningTaskInfos = activityManager.getRunningTasks(1); if (runningTaskInfos != null) { ComponentName f = runningTaskInfos.get(0).topActivity; topActivityClassName = f.getPackageName(); LogDebugUtil.w("lee", new Date().toLocaleString() + " topActivity " + topActivityClassName); } return topActivityClassName; } /** * 检查包是否存在 * * @param context * @param packageName * @return */ static public boolean checkApplication(Context context, String packageName) { if (packageName == null || "".equals(packageName)) { return false; } try { // ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return true; } catch (NameNotFoundException e) { return false; } } /** * 判断 activity 是否存在 * * @param context * @param intent * @return */ static public boolean checkActivity2(Context context, Intent intent) { if (context.getPackageManager().resolveActivity(intent, 0) == null) { // 说明系统中不存在这个activity return false; } else { return true; } } /** * 判断 activity 是否存在 * * @param context * @param intent * @return */ static public boolean checkActivity(Context context, Intent intent) { if (intent.resolveActivity(context.getPackageManager()) == null) { // 说明系统中不存在这个activity return false; } else { return true; } } /** * 判断 activity 是否存在 * * @param context * @param intent * @return */ static public boolean checkActivity3(Context context, Intent intent) { List
list = context.getPackageManager().queryIntentActivities(intent, 0); if (list.size() == 0) { // 说明系统中不存在这个activity return false; } else { return true; } } }