Android開發中apk安裝包常用工具

f663x 9年前發布 | 970 次閱讀 Java Android

開發項目中用到的有關獲取apk信息的工具類,在做版本升級的時候一般都需要用到部分方法,做點筆記:

public class AppUtil {
    /**

 *根據應用包名(package name)啟動應用 

    *參數分別是上下文context和應用包名:pkgName

      */

public static boolean startApkByPkgName(Context context, String pkgName) {
    PackageManager packageManager = context.getPackageManager();
    Intent intent = new Intent();
    intent = packageManager.getLaunchIntentForPackage(pkgName);
    if (intent == null) {
        System.out.println("APP not found!");
        return false;
    }
    context.startActivity(intent);
    return true;
}

/**
 * 根據apk文件路徑得到app信息
 */
public static ApplicationInfo getApkInfoByPath(Context context,String absPath) {
    ApplicationInfo appInfo = null;
    PackageManager pm = context.getPackageManager();
    PackageInfo pkgInfo = pm.getPackageArchiveInfo(absPath,PackageManager.GET_ACTIVITIES);
    if (pkgInfo != null) {
        appInfo = pkgInfo.applicationInfo;
        /* 必須加這兩句,不然下面icon獲取是default icon而不是應用包的icon */
        appInfo.sourceDir = absPath;
        appInfo.publicSourceDir = absPath;
    }
    return appInfo;
}

/**
 *根據apk應用包名得到應用信息
 */
public static PackageInfo getApkInfoByPkgName(Context context, String pkgName) {
    PackageInfo pkgInfo = null;
    PackageManager pm = context.getPackageManager();
    try {
        // 0代表是獲取版本信息
        pkgInfo = pm.getPackageInfo(pkgName, 0);
    } catch (NameNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return pkgInfo;
}
/**
 *根據apk文件路徑得到應用信息
 */
public static PackageInfo getPkgInfoByPath(Context context, String absPath) {
    PackageInfo pkgInfo = null;
    PackageManager pm = context.getPackageManager();
    pkgInfo = pm.getPackageArchiveInfo(absPath,
            PackageManager.GET_ACTIVITIES);
    return pkgInfo;
}

/**
 *根據apk路徑直接跳到安裝界面
 */
public static void installApkByPath(Context context, String absPath) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file://" + absPath),
            "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

/* 根據apk包名卸載應用 */ public static void uninstallApk(Context context, String packageName) { String uriString = "package:" + packageName; Uri uninstallUrl = Uri.parse(uriString); Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUrl); context.startActivity(intent); }

public static List<ResolveInfo> queryAppInfo(Context context,
        String packageName) {
    PackageManager pm = context.getPackageManager(); // 獲得PackageManager對象
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    mainIntent.setPackage(packageName);
    // 通過查詢,獲得所有ResolveInfo對象.
    List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent,
            PackageManager.GET_INTENT_FILTERS);
    return resolveInfos;

}

  /**

    *根據名名獲取版本信息

   */
public static int getInstalledAppVersionCode(Context context, String pkgName) {
    int versionCode = -1;
    PackageInfo pkgInfo = AppUtil.getPkgInfoByName(context, pkgName);
    if (pkgInfo != null) {
        versionCode = pkgInfo.versionCode;
    }
    return versionCode;
}

} </pre>

 本文由用戶 f663x 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!