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