android项目整理方法类-android apk本地应用管理工具类

----------单个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管理工具类-----------------------------
/**
 * 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;
//
// }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值