App内跳转应用市场详情

作者: 料峭寒 | 来源:发表于2016-12-02 14:10 被阅读733次

    有这样一个应用场景:在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);
    

    相关文章

      网友评论

        本文标题:App内跳转应用市场详情

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