Android App通过应用宝获取版本信息,从而跳转到不同应用商店更新APP
1、跳转主流应用市场工具方法
const val YYB = "com.tencent.android.qqdownloader"
const val HUAWEI = "com.huawei.appmarket"
const val XIAOMI = "com.xiaomi.market"
const val OPPO = "com.oppo.market"
const val VIVO = "com.bbk.appstore"
const val SANSUNG="com.sec.android.app.samsungapps"fun isAppAvailable(packageName: String): Boolean {// 获取packagemanagerval packageManager: PackageManager = App.instance.packageManager// 获取所有已安装程序的包信息val pinfo: List<PackageInfo> = packageManager.getInstalledPackages(0)// 用于存储所有已安装程序的包名val pName: MutableList<String> = ArrayList()// 从pinfo中将包名字取出for (i in pinfo.indices) {val pf: String = pinfo[i].packageNamepName.add(pf)}// 判断pName中是否有目标程序的包名,有true,没有falsereturn pName.contains(packageName)
}/*** 启动到应用商店app详情界面** @param appPkg 目标App的包名* @param marketPkg 应用商店包名 ,如果为""则由系统弹出应用商店列表供用户选择,否则调转到目标市场的应用详情界面*/
fun launchAppDetail(marketPkg: String?) {try {val uri: Uri = Uri.parse("market://details?id=com.tencent.mobileqq")val intent = Intent(Intent.ACTION_VIEW, uri)if (!TextUtils.isEmpty(marketPkg)) {intent.setPackage(marketPkg)}intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)App.instance.startActivity(intent)} catch (e: Exception) {e.printStackTrace()}
}
2、通过抓取网页版本信息,对比本地,然后更新app
class UpdateAsyncTask(var context: Context) : AsyncTask<String, Void, String>() {companion object {private const val tencentUrl: String = "https://android.myapp.com/myapp/detail.htm?apkName=cn.com.blackview.dashcam"private const val getElementsByClass: String = "pp-comp-extra-p"}override fun doInBackground(vararg params: String): String {var version = ""kotlin.runCatching {val doc = Jsoup.connect(tencentUrl).get()val elementsByClass = doc.getElementsByClass(getElementsByClass)if (elementsByClass.size > 1) {version = elementsByClass[1].text()}}.getOrNull()return version//通过本地接口
// var result = ""
// kotlin.runCatching {
// val url = URL("http://test.blackview4g.com:8910/community/api/appVersion")
// val urlConnection = url.openConnection() as HttpURLConnection
// val responseCode: Int = urlConnection.responseCode
// if (responseCode == HttpURLConnection.HTTP_OK) {
// result = readStream(urlConnection.inputStream)
// }
// }.getOrNull()
//
// return result}override fun onPostExecute(s: String) {super.onPostExecute(s)//版本:4.5.1421115kotlin.runCatching {val versionCode = s.split(":")[1].split(".")[2].toInt()val localVersionCode = App.instance.packageManager.getPackageInfo(App.instance.packageName, 0).versionName.toString().split(".")[2].toInt()Log.e("dd", "localVersionCode:$localVersionCode")Log.e("dd", "versionCode:$versionCode")if (localVersionCode < versionCode) {if (context is BaseActivity) {if ((context as BaseActivity).isFinishing) {return}}LDDialog.Builder(context).setTitle(App.instance.resources.getString(R.string.album_note)).setContent(App.instance.resources.getString(R.string.album_note_upgrade_title)).setRightButton(App.instance.resources.getString(R.string.album_confirm)){ dialog: IDialog ->dialog.dismiss()setIntent()}.setLeftButton(App.instance.resources.getString(R.string.album_cancel)){ dialog: IDialog -> dialog.dismiss() }.show()}}.getOrNull()}private fun setIntent() {when {isAppAvailable(YYB) -> {launchAppDetail(YYB)}isAppAvailable(HUAWEI) -> {launchAppDetail(HUAWEI)}isAppAvailable(XIAOMI) -> {launchAppDetail(XIAOMI)}isAppAvailable(OPPO) -> {launchAppDetail(OPPO)}isAppAvailable(VIVO) -> {launchAppDetail(VIVO)}else -> {val uri = Uri.parse(tencentUrl)val intent = Intent(Intent.ACTION_VIEW, uri)intent.flags = Intent.FLAG_ACTIVITY_NEW_TASKApp.instance.startActivity(intent)}}}private fun readStream(inputStream: InputStream): String {var reader: BufferedReader? = nullval response = StringBuffer()try {reader = BufferedReader(InputStreamReader(inputStream))var line: String?while (reader.readLine().also { line = it } != null) {response.append(line)}} catch (e: IOException) {e.printStackTrace()} finally {if (reader != null) {try {reader.close()} catch (e: IOException) {e.printStackTrace()}}}return response.toString()}}
Android App通过应用宝获取版本信息,从而跳转到不同应用商店更新APP相关推荐
- sdk数值与android版本,Android SdkVersion的区别及获取版本信息方法
1.minSdkVersion,targetSdkVersion,maxSdkVersion,compileSdkVersion四个数值之间有什么区别? • minSdkVersion,maxSdkV ...
- Android 打开 GPS 导航并获取位置信息
原文地址为: Android 打开 GPS 导航并获取位置信息 最近在做一个 Android 项目,需要用到GPS获取位置信息,从 API 查了一下,发现获取位置信息仅需极其简单的一句即可: getL ...
- 第五人格获取服务器信息失败,第五人格获取版本信息失败怎么办 获取版本信息失败解决办法[图]...
第五人格获取版本信息失败怎么办?有很多玩家遇到了这个问题,主要是游戏需要进行更新检查,获取失败就不能保证当前的游戏版本是最新的,就不能进入游戏,下面小编带来了解决办法! 获取版本信息失败解决办法: 1 ...
- 第五人格获取服务器信息失败,第五人格正在获取版本信息更新失败怎么办
第五人格正在获取版本信息怎么回事?相信最近很多玩家在进入第五人格游戏的时候一直会卡在一个显示"正在获取版本信息"的界面,而且在获取一段时间后再显示获取更新失败,请重新尝试,那么这个 ...
- 第五人格获取服务器信息失败,第五人格正在获取版本信息解决办法 [图]
第五人格正在获取版本信息怎么回事?相信最近很家在进入第五人格游戏的时候一直会卡在一个显示"正在获取版本信息"的界面,而且在获取一段时间后再显示获取更新失败,请重新尝试,那么这个是什 ...
- 星力+手游运营版本完整版打包下载 代理+服务端+后台+更新+APP
介绍: 星力+手游运营版本完整版打包下载 代理+服务端+后台+更新+APP 网盘下载地址: https://zijiewangpan.com/AM4tpRbz0L2 图片:
- Android 天气APP(二)获取定位信息
上一篇:Android 天气APP(一)开发准备 编码阶段 新版------------------- 一.使用ViewBinding 二.初始化SDK 三.初始化定位 四.检查和请求权限 五.文章源 ...
- Android之使用MediaMetadataRetriever类获取媒体信息
一.昨天,介绍了使用MediaMetadataRetriever类来获取视频第一帧: http://blog.csdn.net/u012561176/article/details/47858099, ...
- Android使用百度地图api获取定位信息(经纬度)
文章目录 注册 申请密钥 配置 使用 遇到问题 注册 登录百度地图开放平台 注册百度地图开发者,填写相关信息 提交成功后收到邮件 点击链接弹出如下提示就算激活成功了 申请密钥 点击申请密钥或者创建应用 ...
- android使用高德地图SDK获取定位信息
注册账号.创建应用.获取API KEY等这些就不说了,按照官网来就行,我们来讲讲项目的配置及示例代码. 高德地图获取定位信息配置要比百度地图简单多了,这是我比较喜欢的一点,而且之前用百度地图嵌入一个应 ...
最新文章
- 「情报局21」2019 AI 进入新算力时代
- C++2 dimension vector
- c语言选择排序_冒泡、插入、选择排序(C语言)
- SAP UI5 应用开发教程之五十二 - 如何使用 SAP UI5 的标准控件结合 Cordova 插件调用手机摄像头进行条形码扫描
- linux 二级域名设置
- CentOS下如何配置LAMP环境
- 【clickhouse】clickhouse强大智能的 Projection (投影) 功能
- assimp android build,使用Android Studio+CMakeLists编译assimp
- 一起谈.NET技术,asp.net控件开发基础(13)
- 化学人学python有前途吗-转载:python之蟒开启理论计算化学的新时代
- 2021秋季《数据结构》_EOJ 1086.哥尼斯堡的七桥问题
- debian安装mediawiki教程
- 亲密关系科学(05)男女大脑激素差异
- python正则表达式实战中的总结
- 点击图片实现图片居中放大的功能
- PDF文件如何在线分割
- python3 cookbook中常遇问题的解答记录
- 盘点国内外十类垂直型社交网站
- 根据百度地图经纬度获取位置信息
- 实验室设计SICOLAB第三方检测中心实验室设计