美文网首页
android关于应用市场跳转的问题

android关于应用市场跳转的问题

作者: crush_d872 | 来源:发表于2020-07-09 18:50 被阅读0次

最近项目中有个需求,在客户端中跳转到应用市场去下载应用,

public class MarketUtils {


/**
 * @param marketPackage 接口下发应用市场包名
 * @param appPackage 固定要下载的应用
 * */
public static boolean getAndroidBrand(Context context,JSONObject marketPackage,String appPackage){
    String brand = Build.MANUFACTURER.toLowerCase();
    Log.e("本机的手机品牌", "产品品牌:" + Build.BRAND.toString().toLowerCase() + "产品制造商:"+brand);

    try {
        if (marketPackage != null ){           //如果检测到有这个市场的包名 并且手机存在这个市场
            //先要判断各大手机应用市场类似于 oppo vivo huawei 等,如果没有 再去判断
            if (marketPackage.optString(brand) != null && hasPackage(context,marketPackage.optString(brand))){            //先检测各大手机应用市场 如果没有 则去检测其他助手 或者市场等
                launchAppDetail(context,appPackage,marketPackage.optString(brand));
                return true;
            }else{
                JSONArray array = marketPackage.optJSONArray("other");
                if (array != null){
                    for (int i=0;i<array.length();i++){         //遍历这个
                        if (hasPackage(context,array.optString(i))){
                            launchAppDetail(context,appPackage,array.optString(i));
                            return true;
                        }
                    }
                }
            }

        }
    } catch (Exception e) {
        return false;
    }
    return false;
}

/**
 * 判断应用市场是否存在的办法
 * oppo查不到应用商店
 * */
public static boolean isAvilible(Context context,String packageName){
    //获取packageManager
    final PackageManager packageManager = context.getPackageManager();
    //获取所有已安装程序的包信息
    List<PackageInfo> pinfo = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    //用于存储所有已安装程序的包名
    List<String> pName = new ArrayList<>();
    if (pinfo != null){
        for (int i = 0; i < pinfo.size(); i++) {
            String pf = pinfo.get(i).packageName;
            Log.e("oppo应用市场",pinfo.get(i).packageName);
            pName.add(pf);
        }
    }
    return pName.contains(packageName);
}
/**
 * 启动到应用商店app详情界面
 * @param appPkg    目标App的包名
 * @param marketPkg 应用商店包名 ,如果为"" 则由系统弹出应用商店
 * 列表供用户选择,否则调转到目标市场的应用详情界面,某些应用商店可能会失败
 *
 */
public static void launchAppDetail(Context context, String appPkg, String marketPkg) {
    try {
        if (TextUtils.isEmpty(appPkg)) return;
        Uri uri = Uri.parse("market://details?id=" + appPkg);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        if (!TextUtils.isEmpty(marketPkg)) {
            intent.setPackage(marketPkg);
        }
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

//通过包名找应用
private static boolean hasPackage(Context context, String pkgName) {
    if (null == context || null == pkgName) {
        return false;
    }

    boolean bHas = true;
    try {
        context.getPackageManager().getPackageInfo(pkgName, PackageManager.GET_GIDS);
    } catch (PackageManager.NameNotFoundException e) {
        // 抛出找不到的异常,说明该程序已经被卸载
        bHas = false;
    }
    return bHas;
}

}

相关文章

网友评论

      本文标题:android关于应用市场跳转的问题

      本文链接:https://www.haomeiwen.com/subject/irnscktx.html