----------单个apk解析类------------------
/**
/**
*
* 根据安装路径本地apk解析后返回类
*
* @author minner
*
*/
public class LocalAppViewInfo {
public String apkPath;// apk地址
public Context context;
public String appName;// 应用名字
public String packageName;// 包名
public String className;// 类名
public String versionName;// 版本名字
/***
* 是否安装 false 否
*
*/
public boolean isApkAvailable;
public int versionCode;// 版本号
public Drawable apkICON;// 应用图标
LocalAppViewInfo(String apkPath, Context context) {
this.apkPath = apkPath;
this.context = context;
getApkInfo();
}
/**
*
* 根据路径获取apk的信息
*
* @param apkPath
* eg: /data/app/com.inlee.wegos-1.apk
*
* @return false 没有安装
*/
public void getApkInfo()
{
System.out.println("地址:" + apkPath);
if (apkPath != null && !apkPath.equals("")) {
PackageManager pm = context.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(apkPath,
PackageManager.GET_ACTIVITIES);
if (info != null) {
ApplicationInfo appInfo = info.applicationInfo;
// 得到安装包名称
this.packageName = appInfo.packageName;
// 检查是否安装
isApkAvailable = isApkAvailable(appInfo.packageName);
// 得到版本信息
this.versionName = info.versionName;
// 得到类名信息
this.className = appInfo.className;
this.versionCode = info.versionCode;
// 图标信息
// this.apkICON=pm.getApplicationIcon(appInfo);这样获取的是机器人图标。以为pm是查找当期那应用
// 更改地址
appInfo.sourceDir = apkPath;
appInfo.publicSourceDir = apkPath;
apkICON = appInfo.loadIcon(pm);
appName = appInfo.loadLabel(pm).toString();
} else {
// 如果此无此地址
System.out.println("---------无此apk信息,是否地址传值错误-------->");
}
}
}
/**
*
* 判断是否安装
*
*
* @param packagename
* @return
*/
public boolean isApkAvailable(String packagename) {
PackageInfo packageInfo;
try {
packageInfo = context.getPackageManager().getPackageInfo(
packagename, 0);
} catch (NameNotFoundException e) {
packageInfo = null;
}
if (packageInfo == null) {
return false;
} else {
return true;
}
}
}
--------------------本地apk管理工具类-----------------------------
--------------------本地apk管理工具类-----------------------------
/**
* android apk应用管理工具类
*
*
*
* @author minner
*
*/
public class andridLocalApkUtil {
public static String localApkUrl = "";// 本地安装地址
/**
* 判断某个应用程序是否安装是否安装
*
* @param pkgName
* 包名
* @return true 已经安装 fasle 未安装
*/
public static boolean isApkInstalled(Context activity, final String pkgName) {
try {
PackageInfo packageInfo = activity.getPackageManager()
.getPackageInfo(pkgName, 0);
if (packageInfo != null) {
return true;
}
} catch (NameNotFoundException e) {
return false;
}
return false;
}
/***
*
* 查询手机内非系统应用
*
*
* @param context
* @return 手机内所有非系统应用
*/
public static List<PackageInfo> getAllAppsTest(Context context) {
List<PackageInfo> apps = new ArrayList<PackageInfo>();
// 获取手机内所有应用
List<PackageInfo> paklist = context.getPackageManager()
.getInstalledPackages(0);
for (PackageInfo pak : paklist) {
// 判断是否为非系统预装的应用程序
if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
// 用户应用
System.out.println("PackageInfo-------" + pak.packageName
+ "--" + pak.applicationInfo.sourceDir);// 打印包名跟安装地址
apps.add(pak);
}
}
return apps;
}
/**
* 根据包名卸载应用
*
*
*
* @param context
* @param pkgName
* 包名
*/
public static void unInstallAPK(Activity context, String pkgName) {
Uri packageUri = Uri.parse("package:" + pkgName);
Intent intent = new Intent(Intent.ACTION_DELETE, packageUri);
context.startActivity(intent);
}
/**
*
* 根据下载地址截取apk名字
*
*
* @param context
* @param downloadPath
* apk下载地址
*/
public static String getHttpToPkgPath(String downloadPath) {
return downloadPath.substring(downloadPath.lastIndexOf('/') + 1); // 获取文件名
}
/**
* 根据包名打开应用
*
* @param apkName
* apk包名
*/
public static void openInstalledAPk(Activity context, String apkName) {
PackageManager packageManager = context.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent = packageManager.getLaunchIntentForPackage(apkName);
context.startActivity(intent);
}
/***
*
* 根据apk手机保存地址安装程序
*
* @param context
* @param urlPath
* apk手机保存地址
*/
public static void installAPK(Activity context, String urlPath) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(new File(urlPath)),
"application/vnd.android.package-archive");
context.startActivity(intent);
}
/**
*
* 根据名字版本保存路径组成安装具体地址 路径+名字+版本+.apk eg: /data/app1.3.apk
*
* @param verson
* 版本
* @param apkName
* 名字
* @param savePath
* apk保存文件路径
* @return
*/
public static String getInstallApkSavePath(String savePath, String version,
String apkName) {
return savePath + apkName + version + ".apk";
}
/**
*
* 根据路径获取某保存apk的文件下所有的apk信息
*
* @param filePath
* 专门用于保存apk的文件夹
*
*/
public static List<LocalAppViewInfo> getAllApkFromPath(Context context,
String filePath) {
List<LocalAppViewInfo> localAppViewInfos = new ArrayList<LocalAppViewInfo>();
File file = new File(filePath);
String[] files = file.list();
if (file != null && files != null) {
for (int i = 0; i < files.length; i++) {
// 如果是apk应用
if ((files[i].substring(files[i].lastIndexOf('.') + 1)
.equals("apk"))) {
// 已经安装应用
// if (localAppViewInfo.isApkAvailable)
LocalAppViewInfo localAppViewInfo = new LocalAppViewInfo(
filePath + files[i], context);
localAppViewInfos.add(localAppViewInfo);
}
}
}
return localAppViewInfos;
}
//
/**
//
*
//
* 根据apk名字,版本,安装保存文件路径,获取此pak状态信息
//
*
//
* 返回: string[0]:安装状态,string[1]:安装地址 string[2]包名
//
*
//
*/
//
public static String[] getApkState(Context context, String apkName,
//
String version, String filePath) {
//
//
String[] state = new String[3];// 状态 更新 打开 安装 0状态,1包名,2本地路径
//
File file = new File(filePath);
//
String[] files = file.list();
//
if (file != null && files != null) {
//
//
for (int i = 0; i < files.length; i++) {
//
System.out.println("----" + files[i]);
//
System.out.println("名字:" + apkName + version + ".apk");
//
//如果是要获取的apk信息
//
if (files[i].equals(apkName + version + ".apk")) {
//
System.out.println("----------------true-");
//
//
// LocalAppViewInfo localAppViewInfo = new LocalAppViewInfo(
//
// Constant.APK_SAVE_PATH + files[i], context);
//
// 检测本机apk状态
//
PackageManager pm = context.getPackageManager();
//
//
PackageInfo info = pm.getPackageArchiveInfo(filePath
//
+ files[i], PackageManager.GET_ACTIVITIES);
//
state[2] = filePath + files[i];
//
// ApplicationInfo appInfo = info.applicationInfo;
//
state[1] = info.packageName;
//
System.out.println("包名" + info.packageName);
//
if (info != null) {
//
//
// 数据库判断是否为可更新应用
//
if (DBService.getInstance(context).isUpdateAppInfo(
//
apkName, version + ""))
//
为可更新应用
//
{
//
state[0] = MyIntents.Types.UPDATE + "";// 可以更新
//
} else if (CommonUtils.isApkInstalled(context,
//
info.packageName)) {
//
判断是否安装
//
state[0] = MyIntents.Types.OPEN + "";
//
//
} else {
//
//
// 为需要安装状态
//
state[0] = MyIntents.Types.INSTALL + "";
//
//
}
//
}
//
//
} else if (files[i].equals(apkName + version +
//
".apk.download")) {
//
//
// 如果不是则表示是下载状态的文件
//
//
state[0] = MyIntents.Types.ADD + "";// 下载状态
//
//
}
//
System.out.println("state --" + state.toString());
//
}
//
}
//
return state;
//
//
}
}