当前位置: 首页 > 知识库问答 >
问题:

Android应用内版本检查

吴嘉禧
2023-03-14

当我的应用程序打开时,我想在google play上查看应用程序版本。如果应用程序的版本高于安装的应用程序,我想通知用户更新应用程序。我在这里发现了“android query”jar,在这里我无法动态检查版本,我想设置主要版本、次要版本或修订版本。谁能帮帮我怎么办?

提前谢谢

共有3个答案

李康安
2023-03-14

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

***这不是一个通用的答案,因为它可能会随着播放页面的改变而改变*

宗政法
2023-03-14

如果你不想使用像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();
    }
}

如果你保持“

公孙弘图
2023-03-14

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

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

private String getCurrentVersion(){
PackageManager pm = this.getPackageManager();
PackageInfo pInfo = null;

        try {
            pInfo =  pm.getPackageInfo(this.getPackageName(),0);

        } catch (PackageManager.NameNotFoundException e1) {
            e1.printStackTrace();
        }
        String currentVersion = pInfo.versionName;

        return currentVersion;
    }

并使用此功能在Google play中获取最新版本(摘自https://stackoverflow.com/a/32942785/444991):

private class GetLatestVersion extends AsyncTask<String, String, String> {
String latestVersion;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        try {
            //It retrieves the latest version by scraping the content of current version from play store at runtime
            String urlOfAppFromPlayStore = "https://play.google.com/store/apps/details?id= your app package address";
            Document  doc = Jsoup.connect(urlOfAppFromPlayStore).get();
            latestVersion = doc.getElementsByAttributeValue("itemprop","softwareVersion").first().text();

        }catch (Exception e){
            e.printStackTrace();

        }

        return latestVersion;
    }
}

然后,当你的应用程序启动时,像这样相互检查:

String latestVersion = "";
        String currentVersion = getCurrentVersion();
        Log.d(LOG_TAG, "Current version = " + currentVersion);
        try {
            latestVersion = new GetLatestVersion().execute().get();
            Log.d(LOG_TAG, "Latest version = " + latestVersion);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

        //If the versions are not the same
        if(!currentVersion.equals(latestVersion)){
            final AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("An Update is Available");
            builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //Click button action
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=your app package address")));
                    dialog.dismiss();
                }
            });

            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //Cancel button action
                }
            });

            builder.setCancelable(false);
            builder.show();
        }

并显示用户更新对话框。但请确保您已经导入了j汤库。

额外:对于导入j汤库,请按照以下步骤操作:

1-进入文件菜单
2-项目结构
3-左侧点击应用程序
4-选择依赖项选项卡
5-点击
6-点击库依赖项
7-搜索“jsoup”
8-选择组织。jsoup:jsoup并单击ok

 类似资料:
  • 我对Android并不陌生,我很习惯于版本处理和如何调整它,但当我看到这一点时,我很困扰。。。 在Lollipop前的任何设备上,这一行都会导致应用程序崩溃,因为构建失败。版本代码。Lollipop字段不存在。。。那么,为什么在文档中推荐的解决方案中会出现这种情况呢? 我真的想知道我错过了什么?

  • 问题内容: 我的问题与 iTunes Connect 中版本和内部版本号的限制有关。我们只允许3个非负整数,并且内部版本号必须是递增的。 我正在设置一个 Jenkins 作业,以将我的构建自动上传到 iTunes Connect, 以便测试人员可以下载它们。 问题: 我们如何确保递增的内部版本号?即使我们在每次提交之前都在Xcode中手动更改了它(这似乎是错误的),也有多个开发人员在项目上工作,所

  • 可能重复: 以编程方式检索Android API版本 我需要如果运行应用程序api级别的手机是14,这是android 4.0或更高(示例api levcel 15),那么启动活动...或者如果api级别低于14(示例13),那么启动活动... 怎么了?

  • > 有没有办法从play Store获得某个应用的版本号?google为此目的公开了任何API吗?我从命令行使用CURL执行了如下操作,但得到了一个错误。 我怎样才能在Android系统中获得已安装应用程序的版本? 本部分通过解决

  • 已经看过这个链接: onIabPurchaseFinish从未打过电话。 和......我看了下面的链接,这就是我面临的确切问题: IabHelper PurchaseFinishedListener 在上面第二个链接中的一个答案中由kevinl表示的问题-是我遇到的问题,即 我在我的活动中编码了'onActivityResult' 控件确实进入了这个方法-但是-它没有进入-onIabPurcha

  • 我用flutter开发我的应用程序。然而,要生成一个应用包并将其上传到play console,我使用Android Studio(Build->generate Signed Apk)。 编辑:模块/应用程序级build.gradle