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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,556评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,554评论 0 17
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,255评论 4 61
  • 自唐露(化名)记事起,她就一直跟外婆生活在一起,童年对爸妈的印象很模糊。特别是小6岁的弟弟出生后,爸妈更无暇照顾她...
    电娱时代阅读 542评论 0 1