我已经实现了代码以在Play商店中获取我的应用程序的当前应用程序版本,因此我可以建议用户在Play商店中有任何新版本时升级应用程序。这段代码工作正常,但现在它无法正常工作。
获取我使用的当前应用版本的代码如下:
newVersion = Jsoup.connect(
"https://play.google.com/store/apps/details?id=" +
"<app package name>" + "&hl=en")
.timeout(30000)
.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[itemprop=softwareVersion]").first()
.ownText();
&#13;
似乎goole play商店网页现在已经更新,我无法找到任何div与itemprops = softwareVersion。我已经检查了我的应用程序的谷歌游戏商店网页的源代码,但它也没有显示当前的应用程序版本。
我得到的例外是:
Process: com.srsvalutech.theparkking, PID: 25357
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.jsoup.nodes.Element.ownText()' on a null object reference
at com.srsvalutech.theparkking.view.SplashScreenActivity$GetAppCurrentVersionAsyncTask.doInBackground(SplashScreenActivity.java:124)
at com.srsvalutech.theparkking.view.SplashScreenActivity$GetAppCurrentVersionAsyncTask.doInBackground(SplashScreenActivity.java:102)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
&#13;
有没有其他方法可以在Android中以编程方式在Play商店中获取Android应用程序的当前应用程序版本。
答案 0 :(得分:2)
我有同样的问题和jppavez的答案来自这个问题: How to get the play store version number for Xamarin Android 为我工作。
只需替换
.select("div[itemprop=softwareVersion]")
.first()
.ownText();
与
.select("div:containsOwn(Current Version)")
.next()
.text();
编辑: 如果谷歌再次对Play商店的来源进行了更改,请不要忘记捕获RuntimeException以防止您的应用程序崩溃。 例如,结合crashlytics crashreport:
} catch (RuntimeException e) {
Crashlytics.logException(e);
答案 1 :(得分:1)
对我们有用的解决方案!
.select("div:containsOwn(Current Version) + div")
.first()
.text();
答案 2 :(得分:0)
这个库基于JSoup来解析HTML https://github.com/danielemaddaluno/Android-Update-Checker
你想要的基本实现将是这样的
private boolean web_update(){
try {
String curVersion = applicationContext.getPackageManager().getPackageInfo(package_name, 0).versionName;
String newVersion = curVersion;
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + package_name + "&hl=en")
.timeout(30000)
.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[itemprop=softwareVersion]")
.first()
.ownText();
return (value(curVersion) < value(newVersion)) ? true : false;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
如果您只想验证版本之间的不匹配,可以更改:
带有value(curVersion) < value(newVersion)
的 value(curVersion) != value(newVersion)
快乐编码