關于作者:CSDN內容合伙人、技術專家, 從零開始做日活千萬級APP。
專注于分享各領域原創系列文章 ,擅長java后端、移動開發、商業變現、人工智能等,希望大家多多支持。
未經允許不得轉載
目錄
- 一、導讀
- 二、概覽
- 三、跳轉到各大廠商應用商店應用詳情頁
- 3.1 vivo
- 3.2 oppo
- 3.3 小米
- 3.4 華為
- 3.5 通用的方式
- 3.6 總結一下
- 四、 推薦閱讀
一、導讀
我們繼續總結學習基礎知識,溫故知新。
本文描述了以下兩方面內容:
獲取當前手機上安裝的應用商店包名跟指定頁面。
跳轉到各大廠商應用商店應用詳情頁。
Android 應用中跳轉到應用市場評分。
二、概覽
在國內基本上每個手機廠商都會有自己的手機應用市場,建立自己的生態,為此,app內可以增加引導用戶去應用市場評價,
目標是持續增加應用市場的好評數,支持運營人員可配置跳轉到某個應用市場去評論。
三、跳轉到各大廠商應用商店應用詳情頁
3.1 vivo
接入評論調起 vivo 應用商店能力后,可以引導你的用戶前往你的 app 在 vivo 應用商店的詳情頁,進行評論和評分。
/*** th_name=need_comment 這個很關鍵,是用于切換tab的* @param context* @param pkgname 待下載資源包名*/public static void gotovivomarket(Context context, String pkgname) {String url = "market://details?id=" + pkgname + "&th_name=need_comment";Uri uri = Uri.parse(url);Intent intent= new Intent(Intent.ACTION_VIEW,uri);intent.setPackage("com.bbk.appstore");context.startActivity(intent);}
網頁調起應用詳情頁方法如下:location.href = 'market://details?id=pkg&th_name=need_comment';
vivo文檔
3.2 oppo
oppo中有兩個應用市場包名,如下:
com.oppo.market //Q (10)之前的軟件商店包名
com.heytap.market // Q (10)之后的軟件商店包名
如果是跳轉詳情頁,請查看后面的方式。
如果是要直接調起評論頁面,需要軟件商店的版本號(versionCode) >= 84000。
應用評論調起能力接入指南
oppo文檔
自更新客戶端接入
oppo文檔
oppo沒有直接跳轉評論的方法,但可以調用oppo提供的應用評論的一個能力。
3.3 小米
如何在app內部跳轉到應用商店的應用詳情頁和評論頁
為了方便開發者在應用內部讓用戶點擊按鈕跳轉到應用商店的應用詳情頁和評論頁,我們提供以下方式支持跳轉,請提供給開發進行查看:
1、跳轉到應用的詳情頁:
market://details?id=pkgName
2、跳轉到應用的評論頁:
market://comments?id=pkgName
action: android.intent.action.VIEW
category: android.intent.category.BROWSABLE
當然,并不是所有系統版本都支持跳轉, 跳轉前請務必判斷activity是否存在。
小米文檔
3.4 華為
華為的跳轉方式會比較多一些,總結一下:
-
跳轉到AG應用詳情頁,應用內拉起跳轉到應用詳情頁,應用用戶進行評分評論等操作。
-
market拉起所有本地商店并跳轉詳情頁
-
鏈接到web AG的應用詳情頁
-
圖章鏈接到AG的應用詳情頁
我們貼出來華為特有的代碼:
/*** 華為特有的方式:* appmarket:// + 包名** @param context* @param pkgname 應用包名,例如華為瀏覽器:com.huawei.browser*/public void toHWMarketByPkgname(Context context, String pkgname) {String text1 = "appmarket://details?id=" + pkgname;Uri uri = Uri.parse(text1);Intent intent = new Intent(Intent.ACTION_VIEW, uri);context.startActivity(intent);}/*** 華為特有的方式:* market:// + 華為商店 + APPID** @param context* @param appId 應用的APPID:例如華為瀏覽器:C100170981*/public void toHWMarketByAppId(Context context, String appId) {String text1 = "market://com.huawei.appmarket.applink?appId=" + appId;Uri uri = Uri.parse(text1);Intent intent = new Intent(Intent.ACTION_VIEW, uri);context.startActivity(intent);}// ====================== 通過intent 應用商店 action 跳轉到AG應用詳情頁 ==========================/*** 應用內通過Intent跳轉到應用詳情頁,應用用戶進行評分評論等操作* @param context* @param marketPkg 應用市場包名,例如華為:com.huawei.appmarket* @param appId 應用的APPID:例如華為瀏覽器:C100170981* @param action 如華為:com.huawei.appmarket.appmarket.intent.action.AppDetail.withid* @return*/public static boolean toMarketByActionAndAppId(Context context, String appId, String marketPkg, String action) {Intent intent = new Intent(action);intent.setPackage(marketPkg);intent.putExtra("appId", appId);context.startActivity(intent);return false;}/*** 應用內通過Intent跳轉到應用詳情頁,應用用戶進行評分評論等操作* @param context* @param pkgname 應用包名,例如華為瀏覽器:com.huawei.browser* @param marketPkg 應用市場包名,例如* 華為:com.huawei.appmarket** @param action 如:"com.huawei.appmarket.intent.action.AppDetail"* @return*/public static boolean toMarketByActionAndPkgname(Context context, String pkgname, String marketPkg, String action) {Intent intent = new Intent(action);intent.setPackage(marketPkg);intent.putExtra("APP_PACKAGENAME", pkgname);context.startActivity(intent);return false;}
華為文檔
華為沒有直接跳轉評論的方法。
3.5 通用的方式
這里我們列出兩種通用方式:
- 通過系統隱式意圖 , market拉起所有本地商店并跳轉詳情頁
/*** 傳入包名,拉起設備上所有的應用商店,讓用戶自行選擇打開方式,即引導用戶選擇使用哪個應用市場拉起。* 選擇好打開的應用商店后可以直接跳轉到應用的詳情頁。* * 使用方法:通過傳入scheme 為market:// 的鏈接,Android支持的標準的market協議,可拉起Android設備上的所有應用商店。** market://details?id=pkgName // 支持所有商店** @param context* @param pkgname 應用包名,例如華為瀏覽器:com.huawei.browser* @param marketPkg 應用市場包名,例如* * 華為:com.huawei.appmarket* * vivo:com.bbk.appstore* * 小米:com.xiaomi.market* * 魅族:com.meizu.mstore* ** * oppo:com.oppo.market //Q之前的軟件商店包名* * oppo:com.heytap.market //Q之后的軟件商店包名* @return 此方式很多市場都跳轉不過去。 需要驗證*/public static boolean toMarketNormal(Context context, String pkgname, String marketPkg) {Uri uri = Uri.parse("market://details?id=" + pkgname);Intent intent = new Intent("android.intent.action.VIEW", uri);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (marketPkg != null) {intent.setPackage(marketPkg);}try {context.startActivity(intent);return true;} catch (Exception unused) {return false;}}
- 通過應用市場的搜索方法 , market拉起所有本地商店并跳轉詳情頁
/*** 打開配置了search的頁面* @param context* @param pkgname 應用包名,例如華為瀏覽器:com.huawei.browser* @param marketPkg* @return*/public static boolean toMarketBySearch(Context context, String pkgname, String marketPkg) {try {Intent i = new Intent(Intent.ACTION_VIEW);i.setData(Uri.parse("market://search?q="+context.getPackageName()));context.startActivity(i);return true;} catch (Exception e) {Toast.makeText(context, "手機沒有安裝Android應用市場", Toast.LENGTH_SHORT).show();return false;}}
上面這兩個方法很簡單易用,幾行代碼就可以實現調用應用市場,唯一的缺點就是如果手機安裝多個應用市場,
他所呈現的彈窗是系統自帶風格,有時候我們需要自己定制自己的統一彈窗風格,這時候就需要通過其他方案來實現
- 獲取當前手機上安裝的應用商店包名跟指定頁面
主要的思路就是找出當前已經安裝的android商店。彈出面板讓由用戶自己去選擇。
首先需要獲取當前已經安裝的包名集合,
然后獲取手機上已安裝的app,過濾剩下應用市場的相關信息定義為appinfo類,appInfo里有這些屬性:包名、應用名、icon、版本號。
這些屬性在后面做一個彈窗之類的功能時候用到,系統自帶的彈出選擇面板會出現的我們都要顯示出來。
/*** 獲取當前手機上安裝的應用商店包名跟指定頁面* 后面在跳轉時根據 marketPkg 進行調整* @param context* @return*/public static HashMap<String, String> getInstalledMarketPackageName(Context context) {HashMap<String, String> hashMap = new HashMap<>();Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");intent.setData(Uri.parse("market://details?id="));List<ResolveInfo> queryIntentActivities = context.getPackageManager().queryIntentActivities(intent, 0);if (queryIntentActivities != null && queryIntentActivities.size() != 0) {int size = queryIntentActivities.size();for (int i = 0; i < size; i++) {CharSequence charSequence = "";String pkgName = "";String cls = "";try {ActivityInfo activityInfo = queryIntentActivities.get(i).activityInfo;pkgName = activityInfo.packageName;try {charSequence = activityInfo.loadLabel(context.getPackageManager());cls = activityInfo.name;try {context.getResources().getString(context.getPackageManager().getPackageInfo(pkgName, 0).applicationInfo.labelRes);} catch (Exception unused) {}} catch (Exception unused2) {charSequence = "";}} catch (Exception unused3) {charSequence = "";}if (!TextUtils.isEmpty(pkgName)) {hashMap.put(charSequence.toString(), pkgName);Log.d("20230913", charSequence.toString() +", pkgname = " + pkgName +", cls = " + cls);}}}return hashMap;}
3.6 總結一下
將各大應用市場的跳轉方式進行聚合在一塊,我們直接上代碼:
實際使用過程中大家需要調試一下,跳轉詳情頁跟評論頁面是有些許區別的。
/**** @param context* @param pkgName*/public static void openAppMarket(Context context, String pkgName) {String uriString = "";String marketPkg = "";try {String lowerCase = Build.BRAND.toLowerCase(Locale.ROOT);if (lowerCase.equals("xiaomi") || lowerCase.equals("redmi")) {uriString = "mimarket://details?id=";marketPkg = "com.xiaomi.market";}if (lowerCase.equals("huawei") || lowerCase.equals("honor")) {uriString = "appmarket://details?id=";marketPkg = "com.huawei.appmarket";}if (lowerCase.equals("vivo")) {uriString = "vivoMarket://details?id=";marketPkg = "com.bbk.appstore";}
// if (lowerCase.equals("flyme")) {
// str2 = "mstore://details?packagename=";
// marketPkg = "";
//
// }
// if (lowerCase.equals("samsung")) {
// str2 = "samsungapps://ProductDetail/";
// marketPkg = "";
//
// }if (lowerCase.equals("oppo") || lowerCase.equals("oneplus") || lowerCase.equals("realme")) {uriString = "oppomarket://details?packagename=";if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {marketPkg = "com.heytap.market";} else {marketPkg = "com.oppo.market";}}if(TextUtils.isEmpty(uriString)) {uriString = "market://details?id=";}Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(uriString + pkgName));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (marketPkg != null) {intent.setPackage(marketPkg);}try {context.startActivity(intent);
// return true;} catch (Exception unused) {
// return false;}} catch (Exception e) {e.printStackTrace();Log.e("LuckyDogUtils", "手機無應用商店");}}public static boolean toHuaWeiMarketDetails(Context context, String pkgname) {try {Intent intent = new Intent("com.huawei.appmarket.intent.action.AppDetail");intent.setPackage("com.huawei.appmarket");intent.putExtra("APP_PACKAGENAME", pkgname);context.startActivity(intent);return true;} catch (Exception e) {}return false;}public static boolean toXiaomiMarketDetails(Context context, String pkgname) {try {Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("mimarket://comments?id=" + pkgname));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory("android.intent.category.BROWSABLE");intent.setPackage("com.xiaomi.market");context.startActivity(intent);return true;} catch (Exception e) {}return false;}
四、 推薦閱讀
Java 專欄
SQL 專欄
數據結構與算法
Android學習專欄
未經允許不得轉載