跳轉應用市場詳情頁market

關于作者: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學習專欄

未經允許不得轉載

ddd

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167942.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

播放器開發(四):多線程解復用與解碼模塊實現

學習課題&#xff1a;逐步構建開發播放器【QT5 FFmpeg6 SDL2】 前言 根據第一章內容&#xff0c;我們首先可以先把解復用和解碼模塊完成&#xff0c;其中需要使用到多線程以及隊列&#xff0c;還需要使用FFmpeg進行解復用和解碼動作的實現。 創建BaseQueue基類 BaseQueue.h…

亞馬遜兩步驗證有哪些驗證方法?

亞馬遜通常提供多種兩步驗證的方式&#xff0c;包括短信&#xff08;通過手機接收驗證碼&#xff09;和認證器應用程序&#xff08;如Google Authenticator、Authy等&#xff09;。選擇你偏好的方式。 短信驗證&#xff1a; 如果選擇短信驗證&#xff0c;需要將你的手機號碼關聯…

YOLOv8改進 | 2023 | LSKAttention大核注意力機制助力極限漲點

論文地址&#xff1a;官方論文地址 代碼地址&#xff1a;官方代碼地址 一、本文介紹 在這篇文章中&#xff0c;我們將講解如何將LSKAttention大核注意力機制應用于YOLOv8&#xff0c;以實現顯著的性能提升。首先&#xff0c;我們介紹LSKAttention機制的基本原理&#xff0c;…

loginctl - 控制 systemd 登錄管理器

loginctl loginctl用途loginctl安裝開啟loginctl服務session操作user操作管理用戶服務 loginctl - Control the systemd login manager Redhat/centos平臺使用loginctl管理登錄用戶與session loginctl用途 控制 systemd 登錄管理器管理當前登錄的用戶和session loginctl安裝…

Peter算法小課堂—高精度加法

指針與數組 看看以下代碼&#xff0c;請預測答案 #include <bits/stdc.h> using namespace std; int x[10]{0,1,2,3,4,5,6,7,8,9}; int main(){cout<<x<<endl;cout<<x3<<endl;cout<<*x<<endl;cout<<*(x7)<<endl;cout&…

定制手機套餐---python序列

if __name__ __main__:print("定制手機套餐")print("")#定義電話時長&#xff1a;字典callTimeOptions{1:0分鐘,2:50分鐘,3:100分鐘,4:300分鐘,5:不限量}keyinput("請輸入電話時長的選擇編號&#xff1a;")valuecallTimeOptions.get(key)if val…

代碼隨想錄算法訓練營第五十四天|392.判斷子序列 115.不同的子序列

文檔講解&#xff1a;代碼隨想錄 視頻講解&#xff1a;代碼隨想錄B站賬號 狀態&#xff1a;看了視頻題解和文章解析后做出來了 392.判斷子序列 class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp [[0] * (len(t)1) for _ in range(len(s)1)]for i in ra…

Java 關于批量插入遇到的問題 -sqlserver

序言&#xff1a; 我們在做項目的時候&#xff0c;經常會遇到&#xff0c;對數據的新增動作&#xff0c;如果數據量很少的情況下&#xff0c;單個新增對性能還好&#xff0c;但是一旦涉及到 大數據量&#xff0c;如十萬&#xff0c;百萬&#xff0c;千萬&#xff0c;這個時候如…

RabbitMq使用與整合

MQ基本概念 MQ概述 MQ全稱 Message Queue&#xff08;[kju?]&#xff09;&#xff08;消息隊列&#xff09;&#xff0c;是在消息的傳輸過程中保存消息的容器。多用于分布式系統之間進行通信。 &#xff08;隊列是一種容器&#xff0c;用于存放數據的都是容器&#xff0c;存…

優秀的時間追蹤軟件Timemator for Mac輕松管理時間!

在現代社會&#xff0c;時間管理成為了我們工作和生活中的一大挑戰。如果你經常感到時間不夠用&#xff0c;無法高效地完成任務&#xff0c;那么Timemator for Mac將成為你的得力助手。 Timemator for Mac是一款出色的時間追蹤軟件&#xff0c;它可以幫助你精確記錄和管理你的…

Linux的基本指令 ( 一 )

目錄 前言 Linux基本指令 快速認識五個指令 ls指令 補充內容 pwd指令 補充內容 cd指令 補充內容 重新認識指令 指令的本質 which指令 alias指令 最后 一個文件的三種時間 tree指令及安裝 tree指令 前言 關于Linux操作系統的桌面&#xff0c;在學校教學中我們…

實用高效 無人機光伏巡檢系統助力電站可持續發展

近年來&#xff0c;我國光伏發電行業規模日益壯大&#xff0c;全球領先地位愈發鞏固。為解決光伏電站運維中的難題&#xff0c;浙江某光伏電站與復亞智能達成戰略合作&#xff0c;共同推出全自動無人機光伏巡檢系統&#xff0c;旨在提高發電效率、降低運維成本&#xff0c;最大…

Spark---SparkCore(一)

一、術語與寬窄依賴 1、術語解釋 1、Master(standalone):資源管理的主節點&#xff08;進程&#xff09; 2、Cluster Manager:在集群上獲取資源的外部服務(例如&#xff1a;standalone,Mesos,Yarn) 3、Worker Node(standalone):資源管理的從節點(進程)或者說管理本機資源的…

用Python寫一個瀏覽器集群框架

更多Python學習內容&#xff1a;ipengtao.com 在分布式爬蟲和大規模數據采集的場景中&#xff0c;使用瀏覽器集群是一種有效的方式&#xff0c;可以提高數據采集的速度和效率。本文將介紹如何用Python編寫一個簡單但強大的瀏覽器集群框架&#xff0c;以應對需要使用多個瀏覽器實…

WebGL/threeJS面試題掃描與總結

什么是 WebGL&#xff1f;什么是 Three.js&#xff1f;請解釋three.js中的WebGL和Canvas的區別&#xff1f; WebGL(全寫Web Graphics Library)是一種3D繪圖協議&#xff0c;這種繪圖技術標準允許把JavaScript和OpenGL ES 2.0結合在一起&#xff0c;通過增加OpenGL ES 2.0的一個…

分庫分表、分布式數據庫、MPP

分庫分表、分布式數據庫、MPP的區別嗎&#xff1f; 一、MySQL分庫分表和MySQL分布式集群在性能方面各有優劣&#xff0c;具體取決于應用場景和需求。 MySQL分庫分表&#xff1a; 在分庫分表的場景下&#xff0c;可以將負載分散到多個數據庫實例上&#xff0c;從而提高整體性能…

【模糊測試】課堂筆記

模糊測試 模糊測試過程通常是自動化的。這個過程經典地分為以下幾個階段。 準備&#xff1a;這是第一階段&#xff0c;重點是 SUT 輸入和輸出格式的識別和規范。基于此&#xff0c;規范可以減少生成初始無效模糊數據的可能性并創建有效且精確的輸入。Fuzz Data Generation&am…

思科模擬器操作命令

模式 思科模擬器常見的模式有 用戶模式 能夠操作的命令比較少 特權模式特權模式下面可以操作的比較多 全局模式 接口模式 用戶模式進入特權模式: 命令enable 特權模式進行全局模式命令: configure terminal 退出命令 exit命令&#xff1a;返回上一層&#xff0c;即一步一步…

RocketMQ 消息中間件 知識點匯總

目錄 RocketMQ1、什么是RocketMQ?常用術語:2、為什么需要消息隊列3、什么是異步處理4、什么是服務解耦5、什么是流量控制6、消息隊列兩種模型隊列模型:發布/訂閱模型:總結:7、怎么保證消息不丟失8、如何處理消息被重復消費**出現消息重復的情況:****解決方法:**9、如何保…

流量分析-PhishingEmail_WriteUp

一、題目問題 問題1&#xff1a;黑客的email名稱 問題2&#xff1a;黑客向幾人發送了釣魚郵件 問題3&#xff1a;黑客傳輸的木馬文件名 問題4&#xff1a;下載并運行了木馬文件的人的email名稱和ip地址&#xff0c;用“-”連接 問題5&#xff1a;黑客用于反彈shell的主機i…