修复使用浏览器下载功能在山寨机上的适配问题

This commit is contained in:
juntao
2021-03-12 11:50:33 +08:00
parent 55d8b6a866
commit 5e536db94e
3 changed files with 77 additions and 21 deletions

View File

@ -295,7 +295,7 @@ public class PackageUtils {
* 根据路径获取apk的包名
*/
public static String getPackageNameByPath(Context context, String path) {
// 部分设备 (已知 vivo 5.1.1) 在调用 packageManager.getPackageArchiveInfo 获取比较大的 APK 文件时会出现 ANR
// 大于 1G 的 APK 就走另类方法
if (isDeviceUnableToHandleBigApkFile(path)) {
@ -305,17 +305,17 @@ public class PackageUtils {
}
return getPackageNameByPathAlternative(path);
}
PackageManager packageManager = context.getApplicationContext().getPackageManager();
PackageInfo info = packageManager.getPackageArchiveInfo(path, 0);
if (info != null) {
ApplicationInfo appInfo = info.applicationInfo;
return appInfo.packageName;
}
return null;
}
/**
* 此设备是否不能调用 packageManager.getPackageArchiveInfo 来获取 APK 信息
*
@ -323,17 +323,17 @@ public class PackageUtils {
*/
public static boolean isDeviceUnableToHandleBigApkFile(String path) {
if ("vivo".equals(Build.MANUFACTURER)
&& (Build.VERSION_CODES.LOLLIPOP == Build.VERSION.SDK_INT) || Build.VERSION_CODES.LOLLIPOP_MR1 == Build.VERSION.SDK_INT) {
&& (Build.VERSION_CODES.LOLLIPOP == Build.VERSION.SDK_INT) || Build.VERSION_CODES.LOLLIPOP_MR1 == Build.VERSION.SDK_INT) {
File file = new File(path);
if (file != null && file.length() > 1024 * 1024 * 1024) {
return true;
}
}
return false;
}
/**
* 从 APK 文件里读包名的另类方法
* 部分设备 (已知 vivo 5.1.1) 在调用 packageManager.getPackageArchiveInfo 获取比较大的 APK 文件时会出现 ANR
@ -344,7 +344,6 @@ public class PackageUtils {
* 3. demo 里 manifest 中 application 配置和 targetSdk 也改成与光环一样也不会出现 ANR
*
* 大概是光环的某个配置触发了系统的 bug ?
*
*/
private static String getPackageNameByPathAlternative(String path) {
ApkFile apkParser = null;
@ -446,6 +445,20 @@ public class PackageUtils {
return list;
}
/*
* 获取所有已安装的软件的包名(包括系统应用)
*/
public static ArrayList<String> getAllPackageNameIncludeSystemApps(Context context) {
ArrayList<String> list = new ArrayList<>();
List<PackageInfo> packageInfos = getInstalledPackages(context, 0);
for (PackageInfo packageInfo : packageInfos) {
if (!context.getPackageName().equals(packageInfo.packageName)) {
list.add(packageInfo.packageName);
}
}
return list;
}
public static JSONArray getAppList(Context context) {
JSONArray jsonArray = new JSONArray();
try {