Android开发跳转应用市场进行版本更新功能实现
作者:ZH-黑夜 发布时间:2021-12-25 09:24:39
标签:Android,跳转,应用市场,版本更新
现在版本更新有两种处理方式:
跳转到App应用市场,通过应用市场下载更新安装。
在App内进行Apk下载,下载完成后更新安装。
实现思路:
请求后台数据,根据返回版本号对比判断应用是否需要进行更新操作。
若不需要,跳转到登录或应用主界面,若需要进行弹框,让用户选择是否进行更新操作。
若用户选择取消更新,则跳转到登录或应用主界面
若用户选择更新,则判断手机内是否安装需要进入的应用市场APP。
如果已安装,那么根据包名直接进入应用市场的详情页面下载apk.
如果未安装,那么根据后台返回的地址,用浏览器打开进行下载。
关键步骤代码说明:
1.判断用户手机内是否安装需要进入的应用市场APP
/**
* 判断应用市场是否存在的方法
*
* @param context
* @param packageName
*
* 主流应用商店对应的包名
* com.android.vending -----Google Play
* com.tencent.android.qqdownloader -----应用宝
* com.qihoo.appstore -----360手机助手
* com.baidu.appsearch -----百度手机助
* com.xiaomi.market -----小米应用商店
* com.wandoujia.phoenix2 -----豌豆荚
* com.huawei.appmarket -----华为应用市场
* com.taobao.appcenter -----淘宝手机助手
* com.hiapk.marketpho -----安卓市场
* cn.goapk.market -----安智市场
*/
public static boolean isAvilible(Context context, String packageName) {
// 获取packagemanager
final PackageManager packageManager = context.getPackageManager();
// 获取所有已安装程序的包信息
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
// 用于存储所有已安装程序的包名
List<String> pName = new ArrayList<String>();
// 从pinfo中将包名字取出
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pf = pinfo.get(i).packageName;
pName.add(pf);
}
}
// 判断pName中是否有目标程序的包名,有true,没有false
return pName.contains(packageName);
}
2.根据包名直接进入应用市场的详情页面下载apk
/**
* 启动到应用商店app详情界面
*
* @param appPkg 目标App的包名
* @param marketPkg 应用商店包名 ,如果为""则由系统弹出应用商店列表供用户选择,否则调转到目标市场的应用详情界面
*/
public static void launchAppDetail(Context mContext, 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);
mContext.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
3.未安装市场应用,那么根据后台返回的地址,用浏览器打开地址进行下载
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
来源:https://blog.csdn.net/qq_40945489/article/details/108975337?spm=1001.2014.3001.5502
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 一、概述数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等,可动态地改变透视表版面布置,也可以重新安排行
- 一、简介随着 Apple 发布 iPhone X 之后,各大手机厂商也开始模仿这种刘海屏的设计,而且刘海屏手机的用户也是越来越大,前段时间将
- 背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01背包和无限背包,这里主要
- 零、学习目标1、掌握application.properties配置文件2、掌握application.yaml配置文件3、掌握使用@Con
- 一、前言目前大部分手机都是 60Hz 的刷新率,也就是 16.6ms 刷新一次,系统为了配合屏幕的刷新频率,将 Vsync 的周期也设置为
- 1、Java版package com.lyz.utils.common; import java.io.UnsupportedEncodin
- 封装:就是把一些属性和方法封装到一个类里。 继承:就如子类继承父类的一些属性和方法。 多态:就如一个父类有多个不同特色的子类。 这里我就不多
- @Value值注入及配置文件组件扫描spring配置文件对应的是父容器,springMVC配置文件产生的是子容器,前者一般配置数据源,事务,
- 多数据源的目的在于一个代码模块可调用多个数据库的数据进行某些业务操作。MyBatis-Plus开发者写了一个多数据源叫dynamic-dat
- 在Spring MVC中经常要用到 * ,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属
- 对象持久化是指将内存中的对象保存到可永久保存的存储设备中(如磁盘)的一种技术。本文介绍的是除数据库之外的几种对象持久化方式。具体如下:保存成
- 概念异常处理的概念起源于早期的编程语言,如 LISP、PL/I 和 CLU。这些编程语言首次引入了异常处理机制,以便在程序执行过程中检测和处
- 题记:由于业务的需要,需要根据模板定制pdf文档,经测试根据模板导出word成功了;但是导出pdf相对麻烦了一点。两天的研究测试java导出
- 本文为大家分享Android自定义Spinner适配器的相关知识点,供大家参考,具体内容如下一、大致效果二.关键代码在注释中讲重点吧。 (1
- JSTL JSTL简介:JSTL的全称:JSP Standard Tag Library,JSP标准标签库JSTL的作用:&nbs
- 一 . 得到这个对象的实例Connection con ;con = DriverManager.getConnection(url,use
- 多线程经常访问同一资源可能造成什么问题竞态条件和死锁如果两个或多个线程访问相同的对象,或者访问不同步的共享状态 ,就会出现竞态条件;为了避免
- 两个简单的例子,代码实现如下:1、随机拆分一个整数public static List<Integer> randomList(
- 启动类的存放位置今天,写了一个项目,但是启动类为什么一直报错我是放在这个位置的,但是就一直报放在默认包错误 想记录下微服务启动类的
- 自定义TypeHandler映射JSON类型为List1. 实体类这里只展示需要映射的字段,分别在所需映射的字段和实体类上添加注解。&nbs