有這樣一個應用場景:在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);