diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index cb85d88ab1..91bfb7407b 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -9,18 +9,14 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; import android.net.Uri; import android.os.Bundle; -import android.support.v4.util.ArrayMap; import android.text.TextUtils; -import android.util.DisplayMetrics; import android.widget.Toast; +import com.gh.gamecenter.entity.GameUpdateEntity; import com.gh.gamecenter.manager.FilterManager; import java.io.ByteArrayInputStream; import java.io.File; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; @@ -31,65 +27,6 @@ public class PackageUtils { public static final String publicKey = "OpenSSLRSAPublicKey{modulus=a8c4bb5748fec8d5c35db1a7a182d41ba4721a91131a417330af79ef4ddb43f9fa0ff4907b0a613bfe152de0ed8fc1b2e6f94a908aa98a5f7adc1ce814ba7ec919d75d9910bdfd8649b4789da6a90ffb61f0d23ac4f828a78fcd0d6f6120c1c43c1f87f7498a89eb40ca8e32dfc2f9d5c10d612b95192870223674e241e53305abf320d7eed76ded398778576e4db7b17b3bc6a792f13de5e43a6a5fae4276c73e6990ce97f68dff0ec16fc9594f175c8d49cd0d7877340d9de60942ca0efc737e50b6c295dfe0713e4532b4e810e1ea11b702b4a27753e41559cbceb247e7f044ec4e3ab2e8bccd8b9fd71286e63307550bcde86deee95adb8133076269135b,publicExponent=10001}"; - /* - * 根据apk路径,获取apk的签名信息,耗时 - */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - public static String getApkSignatureByPath(Context context, String path) { - String PATH_PackageParser = "android.content.pm.PackageParser"; - try { - // apk包的文件路径 - // 这是一个Package 解释器, 是隐藏的 - // 构造函数的参数只有一个, apk文件的路径 - // PackageParser packageParser = new PackageParser(apkPath); - Class pkgParserCls = Class.forName(PATH_PackageParser); - Class[] typeArgs = new Class[1]; - typeArgs[0] = String.class; - Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs); - Object[] valueArgs = new Object[1]; - valueArgs[0] = path; - Object pkgParser = pkgParserCt.newInstance(valueArgs); - // 这个是与显示有关的, 里面涉及到一些像素显示等等, 我们使用默认的情况 - DisplayMetrics metrics = new DisplayMetrics(); - metrics.setToDefaults(); - // PackageParser.Package mPkgInfo = packageParser.parsePackage(new - // File(apkPath), apkPath, - // metrics, 0); - typeArgs = new Class[4]; - typeArgs[0] = File.class; - typeArgs[1] = String.class; - typeArgs[2] = DisplayMetrics.class; - typeArgs[3] = Integer.TYPE; - Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod( - "parsePackage", typeArgs); - valueArgs = new Object[4]; - valueArgs[0] = new File(path); - valueArgs[1] = path; - valueArgs[2] = metrics; - valueArgs[3] = PackageManager.GET_SIGNATURES; - Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser, - valueArgs); - - typeArgs = new Class[2]; - typeArgs[0] = pkgParserPkg.getClass(); - typeArgs[1] = Integer.TYPE; - Method pkgParser_collectCertificatesMtd = pkgParserCls - .getDeclaredMethod("collectCertificates", typeArgs); - valueArgs = new Object[2]; - valueArgs[0] = pkgParserPkg; - valueArgs[1] = PackageManager.GET_SIGNATURES; - pkgParser_collectCertificatesMtd.invoke(pkgParser, valueArgs); - // 应用程序信息包, 这个公开的, 不过有些函数, 变量没公开 - Field packageInfoFld = pkgParserPkg.getClass().getDeclaredField( - "mSignatures"); - Signature[] info = (Signature[]) packageInfoFld.get(pkgParserPkg); - return parseSignature(info[0].toByteArray())[0]; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - /* * 根据路径,获取apk的包名 */ @@ -104,6 +41,9 @@ public class PackageUtils { return null; } + /* + * 获取meta-data + */ public static Object getMetaData(Context context, String packageName, String name) { try { Bundle metaDate = context.getPackageManager().getApplicationInfo( @@ -120,8 +60,7 @@ public class PackageUtils { /* * 根据包名,获取apk的签名信息 */ - public static String getApkSignatureByPackageName(Context context, - String packageName) { + public static String getApkSignatureByPackageName(Context context, String packageName) { try { PackageInfo packageInfo = context.getPackageManager() .getPackageInfo(packageName, PackageManager.GET_SIGNATURES); @@ -133,6 +72,31 @@ public class PackageUtils { return null; } + /* + * 判断是否可以更新 + */ + public static boolean isCanUpdate(Context context, GameUpdateEntity gameUpdateEntity) { + // 判断是否gh_version是否相同 + String gh_version = (String) PackageUtils.getMetaData( + context, gameUpdateEntity.getPackageName(), "gh_version"); + if (gh_version != null) { + gh_version = gh_version.substring(2); + // 判断gh_version是否相同 + if (gh_version.equals(gameUpdateEntity.getGhVersion())) { + // 判断version是否相同 + String version = PackageUtils.getVersionByPackage( + context, gameUpdateEntity.getPackageName()); + if (version != null && version.equals(gameUpdateEntity.getVersion())) { + // 版本相同,无需显示插件更新,继续查看是否有可更新的游戏包 + return false; + } + } + } else { + return false; + } + return true; + } + /* * 判断是否是插件包 */ @@ -144,16 +108,16 @@ public class PackageUtils { return false; } - /** + /* * 根据apk路径,获取apk包名、签名 根据包名 判断 是否已安装游戏 根据签名 判断 是否一致 - * - * @param path apk路径 - * @return true 可执行安装 false 要卸载已安装的,再执行安装 */ public static boolean isCanLaunchSetup(Context context, String path) { String packageName = getPackageNameByPath(context, path); - boolean isContain = isContain(context, packageName); + if (TextUtils.isEmpty(packageName)) { + return true; + } + boolean isContain = com.gh.gamecenter.manager.PackageManager.isInstalled(packageName); if (!isContain) { return true; } @@ -229,6 +193,9 @@ public class PackageUtils { return null; } + /* + * 获取apk的版本 + */ public static String getVersionByPackage(Context context, String packageName) { try { return context.getPackageManager().getPackageInfo(packageName, @@ -239,12 +206,8 @@ public class PackageUtils { return null; } - /** + /* * 获取所有已安装的软件的包名、版本(非系统应用) - * - * @param context - * 上下文 - * @return 已安装软件的包名的集合 */ public static ArrayList getAllPackageName(Context context) { FilterManager filterManager = new FilterManager(context); @@ -263,6 +226,9 @@ public class PackageUtils { return list; } + /* + * 启动应用 + */ public static void launchApplicationByPackageName(Context context, String packageName) { Intent intent = context.getPackageManager().getLaunchIntentForPackage( @@ -294,33 +260,8 @@ public class PackageUtils { * 根据包名,判断是否已安装该游戏 */ public static boolean isInstalled(Context context, String packageName) { - Intent intent = context.getPackageManager().getLaunchIntentForPackage( - packageName); - if (intent == null) { - return false; - } - return true; - } - - private static ArrayMap map; - - public static boolean isContain(Context context, String packageName) { - if (TextUtils.isEmpty(packageName)) { - return false; - } - if (map == null) { - map = new ArrayMap<>(); - List infos = context.getPackageManager() - .getInstalledPackages(0); - for (PackageInfo info : infos) { - map.put(info.packageName, true); - } - } - Boolean b = map.get(packageName); - if (b != null) { - return true; - } - return false; + Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); + return intent != null; } /* @@ -347,13 +288,4 @@ public class PackageUtils { return installIntent; } - public static String getInstalledApkPath(Context context, String packageName) { - try { - return context.getPackageManager().getApplicationInfo(packageName, - 0).sourceDir; - } catch (NameNotFoundException e) { - e.printStackTrace(); - } - return null; - } } diff --git a/app/src/main/java/com/gh/common/util/TimestampUtils.java b/app/src/main/java/com/gh/common/util/TimestampUtils.java index 8c472bffbb..2e8093de42 100644 --- a/app/src/main/java/com/gh/common/util/TimestampUtils.java +++ b/app/src/main/java/com/gh/common/util/TimestampUtils.java @@ -64,7 +64,8 @@ public class TimestampUtils { cdMap.put("^" + Config.HOST + "search/news\\?game_id=.+\\&keyword=.+\\&page=.+\\&limit=20" + "$", Constants.NEWS_CD); cdMap.put("^" + Config.HOST + "search/game\\?keyword=.+" + "$", Constants.SEARCH_CD); cdMap.put("^" + Config.HOST + "support/setting/platform" + "$", Constants.PLATFORM_CD); - cdMap.put("^" + Config.HOST + "support/package/update\\?package=.+" + "$", Constants.UPDATE_CD); + cdMap.put("^" + Config.HOST + "update/package/.+" + "$", Constants.UPDATE_CD); + cdMap.put("^" + Config.HOST + "update/game/.+/package/.+" + "$", Constants.UPDATE_CD); cdMap.put("^" + Config.HOST + "device/.+/concern" + "$", 0); cdMap.put("^" + Config.HOST + "device/.+/concern/.+" + "$", 0); cdMap.put("^" + Config.HOST + "stat/download" + "$", 0); @@ -109,7 +110,8 @@ public class TimestampUtils { intervalMap.put("^" + Config.HOST + "search/news\\?game_id=.+\\&keyword=.+\\&page=.+\\&limit=20" + "$", 110); intervalMap.put("^" + Config.HOST + "search/game\\?keyword=.+" + "$", 115); intervalMap.put("^" + Config.HOST + "support/setting/platform" + "$", 120); - intervalMap.put("^" + Config.HOST + "support/package/update\\?package=.+" + "$", 125); + intervalMap.put("^" + Config.HOST + "update/package/.+" + "$", 125); + intervalMap.put("^" + Config.HOST + "update/game/.+/package/.+" + "$", 130); } } } diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateAdapter.java index bb26d24c70..72721c5c6c 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateAdapter.java @@ -37,13 +37,11 @@ import com.gh.gamecenter.eventbus.EBSkip; import com.gh.gamecenter.manager.ConcernManager; import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.manager.PackageManager; -import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; +import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import org.json.JSONArray; +import org.json.JSONObject; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -100,42 +98,51 @@ public class GameUpdateAdapter extends RecyclerView.Adapter() { @Override - public void onResponse(JSONArray response) { + public void onResponse(JSONObject response) { if (response.length() != 0) { Gson gson = new Gson(); - Type listType = new TypeToken>() {}.getType(); - ArrayList games = gson.fromJson(response.toString(), listType); + GameUpdateEntity gameUpdateEntity = gson.fromJson( + response.toString(), GameUpdateEntity.class); - if (!isCanUpdate(games.get(0))) { - games.remove(0); - } - - if (games.size() != 0) { - updateList.add(games.get(0)); + if (PackageUtils.isCanUpdate(context, gameUpdateEntity)) { + updateList.add(gameUpdateEntity); notifyItemRangeInserted(0, 2); - PackageManager.addUpdateList(updateList); + PackageManager.addUpdate(gameUpdateEntity); EventBus.getDefault().post(new EBDownloadChanged("update", View.VISIBLE, updateList.size())); initMap(); } - if (!updateList.isEmpty() && gameupdate_tv_none.getVisibility() == View.VISIBLE) { + if (updateList.isEmpty()) { + gameupdate_tv_none.setVisibility(View.VISIBLE); + } else { gameupdate_tv_none.setVisibility(View.GONE); } gameupdate_ll_loading.setVisibility(View.GONE); @@ -152,57 +159,52 @@ public class GameUpdateAdapter extends RecyclerView.Adapter packages = getInstalledList(); if (packages.size() != 0) { - sortPackageList(packages); - - StringBuilder builder = new StringBuilder(); - String params; - PackageManager.clearUpdateList(); - final int count = (packages.size() / 10) + 1; - final List list = new ArrayList<>(); + final int count = packages.size(); mCount = 0; - for (int i = 0; i < count; i++) { - builder.delete(0, builder.length()); - for (int j = i * 10, size = (i + 1) * 10 > packages.size() ? packages - .size() : (i + 1) * 10; j < size; j++) { - builder.append(packages.get(j)); - builder.append("-"); + Object gh_id; + for (String packageName : packages) { + gh_id = PackageUtils.getMetaData(context, packageName, "gh_id"); + String url; + if (gh_id == null) { + url = Config.HOST + "update/package/" + packageName; + } else { + url = Config.HOST + "update/game/" + gh_id + "/package/" + packageName; } - params = builder.substring(0, builder.length() - 1); - JsonArrayExtendedRequest request = new JsonArrayExtendedRequest( - Config.HOST + "support/package/update?package=" + params, - new Response.Listener() { + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url, + new Response.Listener() { @Override - public void onResponse(JSONArray response) { + public void onResponse(JSONObject response) { if (response.length() != 0) { Gson gson = new Gson(); - Type listType = new TypeToken>() {}.getType(); - ArrayList games = gson.fromJson(response.toString(), listType); - for (int i = 0; i < games.size(); i++) { - if (!isCanUpdate(games.get(i))) { - games.remove(i); - i--; - } + GameUpdateEntity gameUpdateEntity = gson.fromJson( + response.toString(), GameUpdateEntity.class); + if (PackageUtils.isCanUpdate(context, gameUpdateEntity)) { + PackageManager.addUpdate(gameUpdateEntity); } - list.addAll(games); } - mCount++; + addCount(); if (mCount == count) { - processingData(list); + processingData(); } } - }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { - mCount++; + addCount(); if (mCount == count) { - processingData(list); + processingData(); } } }); @@ -213,18 +215,20 @@ public class GameUpdateAdapter extends RecyclerView.Adapter list) { - sortUpdateList(list); + private void processingData() { + for (GameUpdateEntity updateEntity : PackageManager.getUpdateList()) { + updateList.add(updateEntity); + } + sortUpdateList(updateList); - updateList = list; notifyItemRangeInserted(0, 1 + updateList.size()); - PackageManager.addUpdateList(updateList); - EventBus.getDefault().post( - new EBDownloadChanged("update", View.VISIBLE, updateList.size())); + EventBus.getDefault().post(new EBDownloadChanged("update", View.VISIBLE, updateList.size())); initMap(); - if (!updateList.isEmpty() && gameupdate_tv_none.getVisibility() == View.VISIBLE) { + if (updateList.isEmpty()) { + gameupdate_tv_none.setVisibility(View.VISIBLE); + } else { gameupdate_tv_none.setVisibility(View.GONE); } gameupdate_ll_loading.setVisibility(View.GONE); @@ -252,7 +256,8 @@ public class GameUpdateAdapter extends RecyclerView.Adapter list) { - Comparator comparator = new Comparator() { - @Override - public int compare(String lhs, String rhs) { - char[] clhs = lhs.toCharArray(); - char[] crhs = rhs.toCharArray(); - int length; - if (clhs.length < crhs.length) { - length = clhs.length; - } else if (clhs.length > crhs.length) { - length = crhs.length; - } else { - length = clhs.length; - } - for (int i = 0; i < length; i++) { - if (clhs[i] > crhs[i]) { - return 1; - } else if (clhs[i] < crhs[i]) { - return -1; - } else if (i == length - 1) { - if (clhs.length < crhs.length) { - return -1; - } else if (clhs.length > crhs.length) { - return 1; - } else { - return 0; - } - } - } - return 0; - } - }; - Collections.sort(list, comparator); - } - // 对更新列表进行排序 private void sortUpdateList(List list) { Comparator comparator = new Comparator() { diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java index 4f9fcefc04..bda4105039 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java @@ -121,7 +121,7 @@ public class GameUpdateFragment extends Fragment { new EBDownloadChanged("update", View.VISIBLE, -1)); gameupdate_rv_show.getAdapter().notifyItemChanged(location + 1); gameupdate_rv_show.getAdapter().notifyItemChanged(0); - PackageManager.removeUpdateList(busFour.getPackageName()); + PackageManager.removeUpdate(busFour.getPackageName()); } } else if ("卸载".equals(busFour.getType())) { Integer location = adapter.getLocationMap().get(busFour.getPackageName()); diff --git a/app/src/main/java/com/gh/gamecenter/manager/PackageManager.java b/app/src/main/java/com/gh/gamecenter/manager/PackageManager.java index 15726d5cc0..9c24567a3b 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/PackageManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/PackageManager.java @@ -1,105 +1,68 @@ package com.gh.gamecenter.manager; -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; import android.support.v4.util.ArrayMap; import android.text.TextUtils; -import com.gh.common.util.PackageUtils; import com.gh.gamecenter.entity.GameUpdateEntity; -import org.json.JSONArray; -import org.json.JSONObject; - import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; public class PackageManager { - private Context context; private static ArrayList updateList; private static ArrayMap installedMap; private static ArrayList installedList; - public PackageManager(Context context) { - this.context = context; - } - /** - * 获取本地所有已安装的软件的包名的map - * - * @return 已安装游戏列表 + * 初始化 + * + * @param list 已安装包名list */ - public static ArrayMap getInstalledMap() { - return installedMap; - } - - public static ArrayList getInstalledList() { - return installedList; + public static void init(ArrayList list) { + installedMap = new ArrayMap<>(); + installedList = new ArrayList<>(); + for (String packageName : list) { + installedMap.put(packageName, true); + installedList.add(packageName); + } } /** * 根据包名 判断是否安装该游戏 * - * @param packageName - * 包名 + * @param packageName 包名 * @return true 已安装 false 未安装 */ public static boolean isInstalled(String packageName) { - if (packageName == null) { + if (TextUtils.isEmpty(packageName)) { return false; } - if (installedMap == null) { - return false; - } - Boolean b = installedMap.get(packageName); - if (b != null) { - return true; - } - return false; + Boolean b = getInstalledMap().get(packageName); + return b != null; } /** * 移除一个已安装的游戏 * - * @param packageName + * @param packageName 包名 */ public static void removeInstalled(String packageName) { - installedMap.remove(packageName); + getInstalledMap().remove(packageName); + getInstalledList().remove(packageName); } /** * 添加一个已安装的游戏 * - * @param packageName + * @param packageName 包名 */ public static void addInstalled(String packageName) { - installedMap.put(packageName, true); - } - - public void initInstalledMap(ArrayList list) { - installedMap = new ArrayMap<>(); - installedList = new ArrayList<>(); - for (String str : list) { - installedMap.put(str, true); - installedList.add(str); - } - } - - public void getInstalledMapFromLocal() { - installedMap = new ArrayMap<>(); - installedList = new ArrayList<>(); - ArrayList list = PackageUtils.getAllPackageName(context); - for (String str : list) { - installedMap.put(str, true); - installedList.add(str); - } + getInstalledMap().put(packageName, true); + getInstalledList().add(packageName); } /** - * 根据本地已安装的游戏列表,获取可更新游戏列表 + * 获取可更新游戏列表 * * @return 可更新游戏列表 */ @@ -110,10 +73,39 @@ public class PackageManager { return updateList; } + /** + * 获取已安装游戏map + * + * @return 已安装游戏map + */ + public static ArrayMap getInstalledMap() { + if (installedMap == null) { + installedMap = new ArrayMap<>(); + } + return installedMap; + } + + /** + * 获取已安装游戏的包名list + * + * @return 包名list + */ + public static ArrayList getInstalledList() { + if (installedList == null) { + installedList = new ArrayList<>(); + } + return installedList; + } + + /** + * 获取可插件化游戏的数量 + * + * @return 可插件化游戏的数量 + */ public static int getPluggableSize() { - if (updateList != null && updateList.size() != 0) { + if (getUpdateList().size() != 0) { int pluggableSize = 0; - for (GameUpdateEntity entity : updateList) { + for (GameUpdateEntity entity : getUpdateList()) { if (entity.isPluggable()) { pluggableSize++; } @@ -123,9 +115,15 @@ public class PackageManager { return 0; } + /** + * 判断包名是否可以更新 + * + * @param packageName 包名 + * @return true 可以更新 false 不可以更新 + */ public static boolean isCanUpdate(String packageName) { - if (updateList != null && updateList.size() != 0) { - for (GameUpdateEntity entity : updateList) { + if (getUpdateList().size() != 0) { + for (GameUpdateEntity entity : getUpdateList()) { if (entity.getPackageName().equals(packageName) && !entity.isPluggable()) { return true; @@ -135,110 +133,69 @@ public class PackageManager { return false; } - public static GameUpdateEntity getUpdateEntity(String packageName) { - if (updateList != null && updateList.size() != 0) { - for (GameUpdateEntity entity : updateList) { - if (entity.getPackageName().equals(packageName)) { - return entity; - } - } - } - return null; - } - - public static boolean isContain(String packageName) { + /** + * 查看更新列表中是否包含该游戏对应的包名 + * + * @param gameId 游戏id + * @param packageName 包名 + * @return true 包含 false 不包含 + */ + public static boolean isContain(String gameId, String packageName) { if (getUpdateList().isEmpty()) { return false; } for (int i = 0; i < getUpdateList().size(); i++) { - if (getUpdateList().get(i).getPackageName().equals(packageName)) { + if (getUpdateList().get(i).getPackageName().equals(packageName) + && getUpdateList().get(i).getId().equals(gameId)) { return true; } } return false; } + /** + * 添加一个更新 + * + * @param game 游戏 + */ public static void addUpdate(GameUpdateEntity game) { - if (!isContain(game.getPackageName())) { + if (!isContain(game.getId(), game.getPackageName())) { getUpdateList().add(game); } } + /** + * 在特定位置添加一个更新 + * + * @param index 位置 + * @param game 游戏 + */ public static void addUpdate(int index, GameUpdateEntity game) { - if (getUpdateList().isEmpty() || !getUpdateList().get(0).getName().equals(game.getName())) { + if (!isContain(game.getId(), game.getPackageName())) { getUpdateList().add(index, game); } } - - public static void clearUpdateList() { - getUpdateList().clear(); - } - public static void setUpdateList(ArrayList list) { - getUpdateList().clear(); - for (int i = 0; i < list.size(); i++) { - getUpdateList().add(list.get(i)); - } - } - - public static void addUpdateList(List list) { - for (int i = 0; i < list.size(); i++) { - getUpdateList().add(list.get(i)); - } - } - - public static void removeUpdateList(String packageName) { + /** + * 根据包名删除一个更新 + * + * @param packageName 包名 + */ + public static void removeUpdate(String packageName) { for (int i = 0, size = getUpdateList().size(); i < size; i++) { if (packageName.equals(getUpdateList().get(i).getPackageName())) { getUpdateList().remove(i); - break; } } } /** - * 获取所有已安装的软件的包名、版本(非系统应用) + * 获取更新列表数量 * - * @return 已安装软件的包名的集合 + * @return 更新列表数量 */ - public JSONArray getAllPackageName2JSON() { - FilterManager filterManager = new FilterManager(context); - JSONArray jsonArray = new JSONArray(); - List packageInfos = context.getPackageManager() - .getInstalledPackages(0); - for (int i = 0, size = packageInfos.size(); i < size; i++) { - PackageInfo packageInfo = packageInfos.get(i); - if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { - if (!context.getPackageName().equals(packageInfo.packageName)) { - if (!filterManager.isFilter(packageInfo.packageName)) { - HashMap params = new HashMap<>(); - params.put("package", packageInfo.packageName); - if (TextUtils.isEmpty(packageInfo.versionName)) { - params.put("version", ""); - } else { - params.put("version", packageInfo.versionName); - } - Object obj = PackageUtils.getMetaData(context, - packageInfo.packageName, "gh_version"); - String gh_version = null; - if (obj != null && obj.getClass().equals(String.class)) { - gh_version = (String) obj; - } - if (gh_version != null && gh_version.startsWith("gh")) { - params.put("gh_version", gh_version.substring(2)); - } else { - params.put("gh_version", ""); - } - JSONObject jsonObject = new JSONObject(params); - jsonArray.put(jsonObject); - } - } - } - } - return jsonArray; - } - public static int getUpdateListSize() { return getUpdateList().size(); } + }