AM的重点在于获取运行时的信息,而PM的重点在于获取安装的信息
获取Mainfest下的节点信息。包含了所有Activity Service信息。
利用apActivityManager获取服务信息;
并判断当前服务是否在运行中:
public static boolean isServiceRunning(Context context,String serviceName){
boolean isRunning = false;
//判断运行中的服务状态,ActivityManager
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//获取android手机中运行的所有服务
List<ActivityManager.RunningServiceInfo> runningServices = am.getRunningServices(50);
for (ActivityManager.RunningServiceInfo runningServiceInfo : runningServices) {
//System.out.println(runningServiceInfo.service.getClassName());
//判断服务的名字是否包含我们指定的服务名
if (runningServiceInfo.service.getClassName().equals(serviceName)){
//名字相等,该服务在运行中
isRunning = true;
//已经找到 退出循环
break;
}
}
return isRunning;
}
packageManager:
获取已经安装的PackageInfo(不用指定包名返回一个集合):
List<PackageInfo> listpackinfos = packageManager.getInstalledPackages(0);
获取通过包名获取一个PackageInfo信息(以指定包名返回的信息):
PackageManager packageManager = getPackageManager();
try {
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
curryversion=packageInfo.versionCode;
curryname=packageInfo.packageName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
获取开启应用第一个界面的的意图:
Intent launchIntentForPackage = pm.getLaunchIntentForPackage(clickapkBean.getPackgename());
注意有可能为空。有的应用没有主界面!
(ApplicationInfo 是PackageInfo的下一层注意层级关系 ,先有包信息,通过包信息获取到应用信息)
通过PackageInfo获取ApplicationInfo从而获取下面的图片和应用名信息:
apkBean.setApkname(packinfo.applicationInfo.loadLabel(packageManager) + "");
apkBean.setApkpicture(packinfo.applicationInfo.loadIcon(packageManager));
apkBean.setPackgename(packinfo.packageName);
String dir = packinfo.applicationInfo.sourceDir;
File file = new File(dir);
apkBean.setApKsize(file.length());
int flags = packinfo.applicationInfo.flags;
if ((flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
apkBean.setApkflag(true);
} else {
apkBean.setApkflag(false);
}
list.add(apkBean);
通过Environment类获取 储存卡目录和系统内部目录:
File externalStorageDirectory = Environment.getExternalStorageDirectory(); //返回的是一个大文件夹 可以变成字符串就是路径了!
sdmaxSpace = externalStorageDirectory.getTotalSpace();
获取系统内部目录(可以对文件进行操作):
File dataDirectory=Environment.getDataDirectory();
dataDirectory.getTotalSpace();//总空间