App内跳转应用市场详情

有这样一个应用场景:在App内查看关于版本的时候,筛选本机已安装的应用商店并展示,点击后可跳转至App在此应用市场中的详情页面。也可用于依赖于市场更新的App,检测到指定的几个应用市场,跳转下载新版本。

1. 核心

SDK本身提供 market://details?id=包名 这样一种Uri用于跳转至应用市场:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + getActivity().getPackageName()));
startActivity(intent);

正常使用会默认打开已安装的应用商店列表,如只有一个,则打开仅有的应用商店。对于国外Google服务下的App,基本无需太多考虑,然而在国内,却需要考虑其他商店了。

2. 国内应用市场的支持

想要跳转国内应用市场,首先需要判断是否已安装了某个商店,在此,简单列出几个常用的应用市场包名:

//酷市场 -- 酷安网
public static final String PACKAGE_COOL_MARKET = "com.coolapk.market";
//小米应用商店
public static final String PACKAGE_MI_MARKET = "com.xiaomi.market";
//应用宝
public static final String PACKAGE_TENCENT_MARKET = "com.tencent.android.qqdownloader";
//360手机助手
public static final String PACKAGE_360_MARKET = "com.qihoo.appstore";
//豌豆荚
public static final String PACKAGE_WANDOUJIA_MARKET = "com.wandoujia.phoenix2";
//魅族应用商店
public static final String PACKAGE_MEIZU_MARKET = "com.meizu.mstore";

获取已安装应用列表并判断是否存在某个包名:

private void initAppList() {
    appList.clear();
    PackageManager packageManager = getActivity().getPackageManager();
    List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);
    for (PackageInfo packageInfo : packageInfoList) {
        appList.add(packageInfo.packageName);
    }
}
3. 跳转详情

当已知某个App应用市场已存在时,需要跳转到其详情页面(特定的Activity),此时需要两个已知参数,一是应用市场包名,二是详情页的完整名字;关于第二个参数如何获取,目前较好的一种的查看应用市场apk的AndroidManifest.xml找到其中注册了接收打开应用商店uri的页面,可能需要反编译,在此列出以上给出包名的商店对应的详情页:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=" + getActivity().getPackageName()));

//跳转酷市场
intent.setClassName(PACKAGE_COOL_MARKET, "com.coolapk.market.activity.AppViewActivity");

//跳转小米应用商店
intent.setClassName(PACKAGE_MI_MARKET, "com.xiaomi.market.ui.AppDetailActivity");

//跳转应用宝
intent.setClassName(PACKAGE_TENCENT_MARKET, "com.tencent.pangu.link.LinkProxyActivity");

//跳转360手机助手
intent.setClassName(PACKAGE_360_MARKET, "com.qihoo.appstore.distribute.SearchDistributionActivity");

//跳转豌豆荚
intent.setClassName(PACKAGE_WANDOUJIA_MARKET, "com.wandoujia.jupiter.activity.DetailActivity");

//跳转魅族应用商店
intent.setClassName(PACKAGE_MEIZU_MARKET, "com.meizu.flyme.appcenter.activitys.AppMainActivity");

startActivity(intent);
    原文作者:料峭寒
    原文地址: https://www.jianshu.com/p/064db6556c27
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞