網站首頁 編程語言 正文
現在版本更新有兩種處理方式:
跳轉到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
相關推薦
- 2022-04-04 webpack-plugins: plugin的使用 clean-webpack-plugin Cl
- 2022-05-29 python3中的類繼承你真的了解嗎_python
- 2022-09-21 Android開發兩個activity之間傳值示例詳解_Android
- 2023-03-20 C#如何讓winform程序中的輸入文本框保留上次的輸入_C#教程
- 2021-12-06 Go語言實現一個簡單生產者消費者模型_Golang
- 2023-12-25 fiddler展示接口的響應時間
- 2022-01-13 element ui 表格雙擊單元格修改
- 2022-03-21 詳解C++內存的代碼區,全局區,棧區和堆區_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支