跳转应用市场详情页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.mzph.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;…

定制手机套餐---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…

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的一个…

思科模拟器操作命令

模式 思科模拟器常见的模式有 用户模式 能够操作的命令比较少 特权模式特权模式下面可以操作的比较多 全局模式 接口模式 用户模式进入特权模式: 命令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…

什么葡萄酒会适用这种双重滗析方法呢?

滗析有两个主要目的&#xff0c;一种是去除陈年或未经过滤的葡萄酒中的沉淀物。虽然沉淀物不会对你造成任何伤害&#xff0c;但当喝葡萄酒满嘴都是葡萄沉淀物时是一件很糟糕的事。其次&#xff0c;倾析葡萄酒是可以让葡萄酒“呼吸”与氧气接触的&#xff0c;氧气可以软化单宁&a…

LeetCode Hot100 102.二叉树的层序遍历

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 方法&#xff1a;迭代 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if …

C语言——输入一个4位正整数,输出其逆数。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j 0;int a1,a2,a3,a4;printf("输入一个4位正整数&#xff1a;\n");scanf("%d",&i);a1 i/1000; a2 i/100%10; a3 i/10%10; a4 i%10; printf("千位a1%d,百位a…

80C51单片机----数据传送类指令

目录 一.一般传送指令&#xff0c;即mov指令 1.16位传送&#xff08;仅1条&#xff09; 2.8位传送 &#xff08;1&#xff09;目的字节为A&#xff08;累加器&#xff09; &#xff08;2&#xff09;目的字节为Rn(工作寄存器) &#xff08;3&#xff09;目的字节为direct…

超分辨率重建

意义 客观世界的场景含有丰富多彩的信息&#xff0c;但是由于受到硬件设备的成像条件和成像方式的限制&#xff0c;难以获得原始场景中的所有信息。而且&#xff0c;硬件设备分辨率的限制会不可避免地使图像丢失某些高频细节信息。在当今信息迅猛发展的时代&#xff0c;在卫星…