Android应用程序内版本检查
当我的应用程序打开时,我想在google play上检查应用程序版本。如果应用程序的版本高于已安装的应用程序,我想通知用户更新应用程序。我发现“安卓查询”jar来自,在这里我不能动态检查版本,我想设置主要版本、次要版本或修订版本。有人能帮我吗Android应用程序内版本检查,android,Android,当我的应用程序打开时,我想在google play上检查应用程序版本。如果应用程序的版本高于已安装的应用程序,我想通知用户更新应用程序。我发现“安卓查询”jar来自,在这里我不能动态检查版本,我想设置主要版本、次要版本或修订版本。有人能帮我吗 提前感谢基本上,您应该检查市场上应用程序的最新版本以及设备上应用程序的版本,并确定是否有可用的更新。为此,请尝试以下方法: 您应使用此选项获取当前版本(设备上应用程序的版本): 并在Google play中使用此选项获取最新版本(摘自): 并显示“用户更新
提前感谢基本上,您应该检查市场上应用程序的最新版本以及设备上应用程序的版本,并确定是否有可用的更新。为此,请尝试以下方法: 您应使用此选项获取当前版本(设备上应用程序的版本): 并在Google play中使用此选项获取最新版本(摘自): 并显示“用户更新”对话框。但请确保您已经导入了jsoup库 额外:要导入jsoup库,请执行以下步骤: 1-转到文件菜单
2-项目结构
3-左侧点击应用程序
4-选择依赖项选项卡
5-点击+
6-单击库依赖项
7-搜索“jsoup”
8-选择org.jsoup:jsoup并单击ok
如果您不想使用像jsoup这样的库,您可以使用类似这样的方法从Google Play获取当前版本号:
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
public class StackAppVersion {
public static void main(String[] args) {
try {
System.out.println(currentVersion());
} catch (IOException ex) {
System.out.println("Failed to read Google Play page!");
}
}
private static String currentVersion() throws IOException {
StringBuilder sb = new StringBuilder();
try (Reader reader = new InputStreamReader(
new URL("https://play.google.com/store/apps/details?id=com.stackexchange.marvin&hl=en")
.openConnection()
.getInputStream()
, "UTF-8"
)) {
while (true) {
int ch = reader.read();
if (ch < 0) {
break;
}
sb.append((char) ch);
}
} catch (MalformedURLException ex) {
// Can swallow this exception if your static URL tests OK.
}
String parts[] = sb.toString().split("softwareVersion");
return parts[1].substring(
parts[1].indexOf('>') + 1, parts[1].indexOf('<')
).trim();
}
}
import java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.Reader;
导入java.net.MalformedURLException;
导入java.net.URL;
公共类StackAppVersion{
公共静态void main(字符串[]args){
试一试{
System.out.println(currentVersion());
}捕获(IOEX异常){
System.out.println(“无法读取谷歌播放页面!”);
}
}
私有静态字符串currentVersion()引发IOException{
StringBuilder sb=新的StringBuilder();
try(Reader=newinputstreamreader(
新网址(“https://play.google.com/store/apps/details?id=com.stackexchange.marvin&hl=en")
.openConnection()
.getInputStream()
,“UTF-8”
)) {
while(true){
int ch=reader.read();
if(ch<0){
打破
}
某人附加((字符)ch);
}
}捕获(格式错误){
//如果静态URL测试正常,则可以忽略此异常。
}
字符串部分[]=sb.toString().split(“软件版本”);
返回零件[1]。子字符串(
parts[1].indexOf('>')+1,parts[1].indexOf(')在网上搜索了很多次之后,我终于找到了一个解决这个问题的有效方法!所以对于所有其他正在寻找正确答案的人来说
受保护的字符串背景(无效…无效){
StringBuilder sb=新建StringBuilder();
try(Reader=newinputstreamreader(
新网址(“https://play.google.com/store/apps/details?id=“+BuildConfig.APPLICATION_ID+”&hl=en”)
.openConnection()
.getInputStream()
,“UTF-8”
)) {
while(true){
int ch=reader.read();
if(ch<0){
打破
}
某人附加((字符)ch);
}
}捕获(格式错误){
Log.d(“错误”,例如getMessage());
返回null;
}捕获(不支持的编码异常e){
e、 printStackTrace();
Log.d(“错误”,例如getMessage());
返回null;
}捕获(IOE异常){
e、 printStackTrace();
Log.d(“错误”,例如getMessage());
返回null;
}
字符串部分[]=sb.toString().split(“当前版本”);
字符串res=parts[1]。子字符串(
第[1]部分。indexOf(“htlgb”)+7,第[1]部分。indexOf(“htlgb”)+11
).trim().toString();
返回res;
}
已接受的答案不再有效。最近我不得不更改代码
请尝试以下操作:
Jsoup.connect("https://play.google.com/store/apps/details?id=APPPACKAGE&hl=en")
.timeout(10000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get()
.select("div:contains(Current Version)").last().parent()
.select("span").last()
.ownText();
在@Mohammad answer中为当前播放页面添加了一个小小的修改,这对我很有用
@Override
protected String doInBackground(String... params) {
try {
Document doc = Jsoup.connect("https://play.google.com/store/apps/details?id=YOUR_PACKAGE_NAME").get();
Element element = doc.getElementsByClass("BgcNfc").get(3);
latestVersion = element.parent().children().get(1).children().text();
} catch (Exception e) {
latestVersion = currentVersion;
}
return latestVersion;
}
***这不是一个通用的答案,因为它可能会随着播放页面的改变而改变*嗨,Jonathon Reinhart,对不起,我真的不明白。你能解释一下吗?这一直都是由应用程序完成的,甚至是谷歌自己的应用程序。有时后端服务的更新方式不再与野生应用程序的旧版本兼容。因此,它如果你不想支持3年前的版本,因为有些人从不更新任何内容,你可能需要在你的应用程序中执行此操作。在这里找到了一个解决方案我想知道我是否正确回答了你的问题?有没有不使用jsoup lib的方法?是的,有,但这种方法既现代又直接。要添加jsoup,你甚至不需要要查找jar文件,只需打开Android studio的“转到文件”菜单并按照我的8个步骤进行操作,然后只需搜索名称jsoup即可添加jsoup。它是1、2、3方法:)如果您需要更多解释,请让我知道。将来,ddo不会在没有明确归属的情况下复制其他地方的内容。这被视为剽窃。现在,请看,通过在上面的AsyncTask doInBackground函数中添加小的修改,我也能做到这一点:如果play store html页面被更改,会发生什么情况?它工作得很好,看起来更适合未来请确保将&hl=en
放在google play URL的末尾,否则它可能会以另一种语言获取,因此无法工作。
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
public class StackAppVersion {
public static void main(String[] args) {
try {
System.out.println(currentVersion());
} catch (IOException ex) {
System.out.println("Failed to read Google Play page!");
}
}
private static String currentVersion() throws IOException {
StringBuilder sb = new StringBuilder();
try (Reader reader = new InputStreamReader(
new URL("https://play.google.com/store/apps/details?id=com.stackexchange.marvin&hl=en")
.openConnection()
.getInputStream()
, "UTF-8"
)) {
while (true) {
int ch = reader.read();
if (ch < 0) {
break;
}
sb.append((char) ch);
}
} catch (MalformedURLException ex) {
// Can swallow this exception if your static URL tests OK.
}
String parts[] = sb.toString().split("softwareVersion");
return parts[1].substring(
parts[1].indexOf('>') + 1, parts[1].indexOf('<')
).trim();
}
}
StringBuilder sb = new StringBuilder();
try (Reader reader = new InputStreamReader(
new URL("https://play.google.com/store/apps/details?id="+BuildConfig.APPLICATION_ID+"&hl=en")
.openConnection()
.getInputStream()
, "UTF-8"
)) {
while (true) {
int ch = reader.read();
if (ch < 0) {
break;
}
sb.append((char) ch);
}
} catch (MalformedURLException ex) {
Log.d("ERROR", ex.getMessage());
return null;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
Log.d("ERROR", e.getMessage());
return null;
} catch (IOException e) {
e.printStackTrace();
Log.d("ERROR", e.getMessage());
return null;
}
String parts[] = sb.toString().split("Current Version");
String res = parts[1].substring(
parts[1].indexOf("htlgb") + 7, parts[1].indexOf("htlgb") + 11
).trim().toString();
return res;
}
Jsoup.connect("https://play.google.com/store/apps/details?id=APPPACKAGE&hl=en")
.timeout(10000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get()
.select("div:contains(Current Version)").last().parent()
.select("span").last()
.ownText();
@Override
protected String doInBackground(String... params) {
try {
Document doc = Jsoup.connect("https://play.google.com/store/apps/details?id=YOUR_PACKAGE_NAME").get();
Element element = doc.getElementsByClass("BgcNfc").get(3);
latestVersion = element.parent().children().get(1).children().text();
} catch (Exception e) {
latestVersion = currentVersion;
}
return latestVersion;
}