Android应用程序内版本检查

Android应用程序内版本检查,android,Android,当我的应用程序打开时,我想在google play上检查应用程序版本。如果应用程序的版本高于已安装的应用程序,我想通知用户更新应用程序。我发现“安卓查询”jar来自,在这里我不能动态检查版本,我想设置主要版本、次要版本或修订版本。有人能帮我吗 提前感谢基本上,您应该检查市场上应用程序的最新版本以及设备上应用程序的版本,并确定是否有可用的更新。为此,请尝试以下方法: 您应使用此选项获取当前版本(设备上应用程序的版本): 并在Google play中使用此选项获取最新版本(摘自): 并显示“用户更新

当我的应用程序打开时,我想在google play上检查应用程序版本。如果应用程序的版本高于已安装的应用程序,我想通知用户更新应用程序。我发现“安卓查询”jar来自,在这里我不能动态检查版本,我想设置主要版本、次要版本或修订版本。有人能帮我吗


提前感谢

基本上,您应该检查市场上应用程序的最新版本以及设备上应用程序的版本,并确定是否有可用的更新。为此,请尝试以下方法:

您应使用此选项获取当前版本(设备上应用程序的版本):

并在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;
    }