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

2024-09-07 09:28

本文主要是介绍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 跳转至各大应用商店应用详情页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144688

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理