当前位置: 首页 > news >正文

Android 跳转至各大应用商店应用详情页

测试通过机型品牌:
华为、小米、红米、OPPO、一加、Realme、VIVO、IQOO、荣耀、魅族、三星

import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.text.TextUtils;
import com.joyssom.common.utils.ZLog;public class MarketUtils {private static MarketUtils tools;private static final String schemaUrl = "market://details?id=";public static MarketUtils getTools() {if (null == tools) {tools = new MarketUtils();}return tools;}/***/* 不指定包名/* @param mContext*/public boolean startMarket(Context mContext) {String packageName = mContext.getPackageName();//得到包名return startMarket(mContext, packageName);}/*** /* 指定包名* <p>* /** <p>* /* @param mContext* <p>* /* @param packageName*/public boolean startMarket(Context mContext, String packageName) {try {String deviceBrand = getDeviceBrand();//获得手机厂商//根据厂商获取对应市场的包名String brandName = deviceBrand.toUpperCase();//大写if (TextUtils.isEmpty(brandName)) {ZLog.e("没有读取到手机厂商~~");return false;}String marketPackageName = getBrandName(brandName);ZLog.d("marketPackageName:" + marketPackageName);ZLog.d("brandName:" + brandName);ZLog.d("deviceBrand:" + deviceBrand);if (null == marketPackageName || "".equals(marketPackageName)) {return false;}if (marketPackageName.equals(MarketUtils.PACKAGE_NAME.SAMSUNG_PACKAGE_NAME)) {//三星特殊处理Uri uri = Uri.parse("http://www.samsungapps.com/appquery/appDetail.as?appId=" + packageName);Intent goToMarket = new Intent();goToMarket.setClassName("com.sec.android.app.samsungapps", "com.sec.android.app.samsungapps.Main");goToMarket.setData(uri);try {mContext.startActivity(goToMarket);return true;} catch (ActivityNotFoundException e) {return false;}} else {return startMarket(mContext, packageName, marketPackageName);}} catch (ActivityNotFoundException anf) {ZLog.e("要跳转的应用市场不存在!" + anf.getMessage());} catch (Exception e) {ZLog.e("其他错误:" + e.getMessage());}return false;}/***/* 指定包名,指定市场/* @param mContext/* @param packageName/* @param marketPackageName*/public boolean startMarket(Context mContext, String packageName, String marketPackageName) {try {openMarket(mContext, packageName, marketPackageName);return true;} catch (ActivityNotFoundException anf) {ZLog.e("要跳转的应用市场不存在!" + anf.getMessage());return false;} catch (Exception e) {ZLog.e("其他错误:" + e.getMessage());return false;}}/***/* 打开应用市场/* @param mContext/* @param packageName/* @param marketPackageName*/private boolean openMarket(Context mContext, String packageName, String marketPackageName) {try {Uri uri = Uri.parse(schemaUrl + packageName);Intent intent = new Intent(Intent.ACTION_VIEW, uri);intent.setPackage(marketPackageName);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivity(intent);return true;} catch (ActivityNotFoundException anf) {ZLog.e("要跳转的应用市场不存在!" + anf.getMessage());return false;} catch (Exception e) {ZLog.e("其他错误:" + e.getMessage());return false;}}/***/* 检测是否是应用宝或者是百度市场/* @param mContext/* @param packageName/* @return*/private boolean isCheckBaiduOrYYB(Context mContext, String packageName) {boolean installed = isInstalled(packageName, mContext);return installed;}/****/* 检查APP是否安装成功/* @param packageName/* @param context/* @return*/private boolean isInstalled(String packageName, Context context) {if ("".equals(packageName) || packageName.length() <= 0) {return false;}PackageInfo packageInfo;try {packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);} catch (PackageManager.NameNotFoundException e) {packageInfo = null;}if (packageInfo == null) {return false;} else {return true;}}private String getBrandName(String brandName) {if (BRAND.HUAWEI_BRAND.equals(brandName)) {//华为return PACKAGE_NAME.HUAWEI_PACKAGE_NAME;} else if (BRAND.OPPO_BRAND.equals(brandName)) {//opporeturn PACKAGE_NAME.OPPO_PACKAGE_NAME;} else if (BRAND.REALME_BRAND.equals(brandName)) {//realmereturn PACKAGE_NAME.OPPO_PACKAGE_NAME;} else if (BRAND.VIVO_BRAND.equals(brandName)) {//vivoreturn PACKAGE_NAME.VIVO_PACKAGE_NAME;} else if (BRAND.XIAOMI_BRAND.equals(brandName)) {//小米return PACKAGE_NAME.XIAOMI_PACKAGE_NAME;} else if (BRAND.REDMI_BRAND.equals(brandName)) {//红米return PACKAGE_NAME.XIAOMI_PACKAGE_NAME;} else if (BRAND.LENOVO_BRAND.equals(brandName)) {//联想return PACKAGE_NAME.LIANXIANG_PACKAGE_NAME;} else if (BRAND.MEIZU_BRAND.equals(brandName)) {//魅族return PACKAGE_NAME.MEIZU_PACKAGE_NAME;} else if (BRAND.HONOR_BRAND.equals(brandName)) {//荣耀return PACKAGE_NAME.HONOR_PACKAGE_NAME;} else if (BRAND.ZTE_BRAND.equals(brandName)) {//ztereturn PACKAGE_NAME.ZTE_PACKAGE_NAME;} else if (BRAND.NIUBIA_BRAND.equals(brandName)) {//努比亚return PACKAGE_NAME.NIUBIA_PACKAGE_NAME;} else if (BRAND.ONE_PLUS_BRAND.equals(brandName)) {//OnePlusreturn PACKAGE_NAME.OPPO_PACKAGE_NAME;} else if (BRAND.SONY_BRAND.equals(brandName)) {//索尼return PACKAGE_NAME.GOOGLE_PACKAGE_NAME;} else if (BRAND.SAMSUNG_BRAND.equals(brandName)) {return PACKAGE_NAME.SAMSUNG_PACKAGE_NAME;} else if (BRAND.GOOGLE_BRAND.equals(brandName)) {//googlereturn PACKAGE_NAME.GOOGLE_PACKAGE_NAME;}return "";}/*** /* 获取手机厂商*/private String getDeviceBrand() {return android.os.Build.BRAND;}public static class BRAND {public static final String HUAWEI_BRAND = "HUAWEI";//HUAWEI_PACKAGE_NAMEpublic static final String HONOR_BRAND = "HONOR";//HUAWEI_PACKAGE_NAMEpublic static final String OPPO_BRAND = "OPPO";//OPPO_PACKAGE_NAMEpublic static final String REALME_BRAND = "REALME";//OPPO_PACKAGE_NAMEpublic static final String MEIZU_BRAND = "MEIZU";//MEIZU_PACKAGE_NAMEpublic static final String VIVO_BRAND = "VIVO";//VIVO_PACKAGE_NAMEpublic static final String XIAOMI_BRAND = "XIAOMI";//XIAOMI_PACKAGE_NAMEpublic static final String REDMI_BRAND = "REDMI";//XIAOMI_PACKAGE_NAMEpublic static final String LENOVO_BRAND = "LENOVO";//LIANXIANG_PACKAGE_NAME //Lenovopublic static final String ZTE_BRAND = "ZTE";//ZTE_PACKAGE_NAMEpublic static final String XIAOLAJIAO_BRAND = "XIAOLAJIAO";//ZHUOYI_PACKAGE_NAMEpublic static final String QH360_BRAND = "360";//QH360_PACKAGE_NAMEpublic static final String NIUBIA_BRAND = "NUBIA";//NIUBIA_PACKAGE_NAMEpublic static final String ONE_PLUS_BRAND = "ONEPLUS";//OPPO_PACKAGE_NAMEpublic static final String MEITU_BRAND = "MEITU";//MEITU_PACKAGE_NAMEpublic static final String SONY_BRAND = "SONY";//GOOGLE_PACKAGE_NAMEpublic static final String GOOGLE_BRAND = "GOOGLE";//GOOGLE_PACKAGE_NAMEpublic static final String HTC_BRAND = "HTC";//未知应用商店包名public static final String ZUK_BRAND = "ZUK";//未知应用商店包名public static final String SAMSUNG_BRAND = "SAMSUNG";//未知应用商店包名}/** Redmi*//*** /* 华为,oppo,vivo,小米,360,联想,魅族,安智,百度,阿里,应用宝,goog,豌豆荚,pp助手**/public static class PACKAGE_NAME {public static final String OPPO_PACKAGE_NAME = "com.heytap.market";//oppopublic static final String VIVO_PACKAGE_NAME = "com.bbk.appstore";//vivopublic static final String HUAWEI_PACKAGE_NAME = "com.huawei.appmarket";//华为public static final String HONOR_PACKAGE_NAME = "com.hihonor.appmarket";//荣耀public static final String XIAOMI_PACKAGE_NAME = "com.xiaomi.market";//小米public static final String MEIZU_PACKAGE_NAME = "com.meizu.mstore";//,魅族public static final String LIANXIANG_PACKAGE_NAME = "com.lenovo.leos.appstore";//联想public static final String ZTE_PACKAGE_NAME = "zte.com.market";//ztepublic static final String GOOGLE_PACKAGE_NAME = "com.android.vending";//googlepublic static final String NIUBIA_PACKAGE_NAME = "com.nubia.neostore";//努比亚public static final String SAMSUNG_PACKAGE_NAME = "com.sec.android.app.samsungapps";}/*** /* 启动到应用商店app详情界面* <p>* /* @param appPkg 目标App的包名* <p>* /* @param marketPkg 应用商店包名 ,如果为"" 则由系统弹出应用商店* <p>* /* 列表供用户选择,否则调转到目标市场的应用详情界面,某些应用商店可能会失败*/public static void launchAppDetail(Context context, String appPkg, String marketPkg) {try {if (TextUtils.isEmpty(appPkg)) return;Uri uri = Uri.parse("market://details?id=" + appPkg);Intent intent = new Intent(Intent.ACTION_VIEW, uri);if (!TextUtils.isEmpty(marketPkg)) {intent.setPackage(marketPkg);}intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);} catch (Exception e) {e.printStackTrace();}}
}

相关文章:

Android 跳转至各大应用商店应用详情页

测试通过机型品牌&#xff1a; 华为、小米、红米、OPPO、一加、Realme、VIVO、IQOO、荣耀、魅族、三星 import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import …...

Pywinauto鼠标操作指南

Pywinauto是一个强大的Python库&#xff0c;用于自动化Windows桌面应用程序的测试。它提供了一系列工具和API来模拟用户输入&#xff0c;包括键盘、鼠标事件&#xff0c;以及与各种窗口控件交互的能力。本文将详细介绍如何使用Pywinauto来执行鼠标操作&#xff0c;并通过一些示…...

VRAY云渲染动画怎么都是图片?

动画实际上是由一系列连续的静态图像&#xff08;帧&#xff09;组成的&#xff0c;当这些帧快速连续播放时&#xff0c;就形成了动画效果。每一帧都是一个单独的图片&#xff0c;需要单独渲染。 云渲染农场的工作方式&#xff1a; 1、用户将3D场景文件和动画设置上传到云渲染…...

共享内存(C语言)

目录 一、引言 二、共享内存概述 1.什么是共享内存 2.共享内存的优势 三、共享内存的实现 1.创建共享内存 2.关联共享内存 3.访问共享内存 4.解除共享内存关联 5.删除共享内存 四、共享内存应用实例 五、总结 本文将深入探讨C语言中的共享内存技术&#xff0c;介绍其原理、…...

《JavaEE进阶》----16.<Mybatis简介、操作步骤、相关配置>

本篇博客讲记录&#xff1a; 1.回顾MySQL的JDBC操作 2..Mybatis简介、Mybatis操作数据库的步骤 3.Mybatis 相关日志的配置&#xff08;日志的配置、驼峰自动转换的配置&#xff09; 前言 之前学习应用分层时我们知道Web应用程序一般分为三层&#xff0c;Controller、Service、D…...

HuggingFists算子能力扩展-PythonScript

HuggingFists作为一个低代码平台&#xff0c;很多朋友会关心如何扩展平台算子能力。扩展平台尚不支持的算子功能。本文就介绍一种通过脚本算子扩展算子能力的解决方案。 HuggingFists支持Python和Javascript两种脚语言的算子。两种语言的使用方式相同&#xff0c;使用者可以任选…...

WInform记录的添加和显示

1、程序 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace ComboBoxApp {public part…...

★ C++基础篇 ★ string类的实现

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第五章下篇----string类的模拟实现 ~ 上篇&#xff1a;★ C基础篇 ★ string类-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 目录 一 基础结构 二 迭代器 …...

rman compress

级别 初始 备完 耗时 low 1804 3572 0:10 High 1812 3176 2:00 MEDIUM 1820 3288 0:13 BASIC 1828 3444 0:56 ---不如MEDIUM&#xff0c;时间还长 NO COMPRESS 1820 5924 0:5 R…...

创建一个Oracle版本的JDK的Docker镜像

背景说明 OpenJDK 和Oracle JDK 一般情况下我们选择OpenJDK&#xff0c;两者针对大部分场景都可以满足&#xff0c;有些地方例如反射技术获得某些包路径下的类对象等&#xff0c;有时候选择OpenJDK会导致空指针异常。 两者在底层实现方面有部分区别。 创建镜像 这里是Linux…...

Harmony OS DevEco Studio 如何导入第三方库(以lottie为例)?-- HarmonyOS自学2

在做鸿蒙开发时&#xff0c;离不开第三方库的引入 一.有哪些支持的Harmony OS的 第三方库&#xff1f; 第三方库下载地址&#xff1a; 1 tpc_resource: 三方组件资源汇总 2 OpenHarmony三方库中心仓 二. 如何加入到DevEco Studio工程 以 lottie为例 OpenHarmony-TPC/lot…...

JAVA数据导出为Excel

目录 一、导入依赖 二、使用的相关类 1、XSSFWorkbook 构造方法 创建表 操作表 保存表 样式和格式 日期处理 密码保护 其他 2、XSSFSheet 获取属性和信息 行操作 列操作 表的属性 合并单元格 保护表 页眉和页脚 注释 其它 3、XSSFRow 获取属性和信息 单…...

【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234

1. 力扣876&#xff1a;链表的中间节点 1.1 题目&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,…...

第十五届蓝桥杯图形化省赛题目及解析

第十五届蓝桥杯图形化省赛题目及解析 一. 单选题 1. 运行以下程序&#xff0c;角色会说( )? A、29 B、31 C、33 D、35 正确答案&#xff1a;C 答案解析&#xff1a; 重复执行直到m>n不成立&#xff0c;即重复执行直到m<n。所有当m小于或者 等于n时&…...

linux下NTP服务器实战(chrony软件)

linux下NTP服务器实战(chrony软件) 记录linux下NTP服务器搭建及相关管理操作&#xff0c;使用chrony软件包安装部署。相比ntp服务&#xff0c;Chrony服务适用于更高精度、更高稳定性、自动化等场景。 1. 安装 chrony 在大多数Linux发行版上&#xff0c;chrony可以通过包管理…...

Java设计模式之命令模式介绍和案例示范

一、命令模式简介 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户端进行参数化、对请求排队或记录日志&#xff0c;以及支持可撤销的操作。命令模式的核心思想是将发出请…...

Leetcode面试经典150题-74.搜索二维矩阵

解法都在代码里&#xff0c;不懂就留言或者私信 二分查找&#xff0c;比较简单 class Solution {/**解题思路&#xff1a;每一行有序、每一列也有序&#xff0c;只是整体不是严格有序的&#xff0c;那我们需要找一个点&#xff0c;只能往两个方向走&#xff0c;往一个方向走是…...

【数字集成电路与系统设计】基本的组合逻辑电路

目录 一、简单例子引入 1.1 端口声明 1.1.2 Verilog实现 1.1.3 Chisel实现 逐行解释 1.2 内部逻辑实现 1.2.1 Verilog实现 1.2.2 Chisel实现 Chisel 关键点解释 1.3 常用的硬件原语 二、Chisel主要数据类型介绍 2.1 数据类型 2.2 数据宽度 2.3 数据转换 2.4 运算…...

11. 建立你的第一个Web3项目

11. 建立你的第一个Web3项目 在这一部分&#xff0c;我们将带你一步步地建立一个简单的Web3项目&#xff0c;从环境搭建到智能合约的创建与部署&#xff0c;再到开发一个去中心化应用&#xff08;dApp&#xff09;并与智能合约交互。这是你迈向Web3开发的第一步。 1. 环境搭建…...

衡石分析平台使用手册-容器部署

容器部署​ 本文介绍如何在容器上部署 HENGSHI SENSE&#xff0c;以及部署后如何进行版本升级和数据备份。 部署前准备工作​ 单机部署前&#xff0c;请完成如下准备工作。 1.检查 docker 的环境。需要满足 Docker 版本 > 17.09安装 docker-compose。 2.获取并导入离线…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...