このコードを使用してPlayストアアプリのバージョンを取得していますが、これによりアプリがハングします。 Playストアアプリのバージョンを取得する他の方法、またはこのコードを使用してアプリがハングして正常に実行されないようにする方法を指定してください。前もって感謝します。
public class VersionChecker extends AsyncTask<String, String, String> {
private String newVersion;
@Override
protected String doInBackground(String... params) {
try {
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + "trai.gov.in.dnd" + "&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();
} catch (IOException e) {
e.printStackTrace();
}
return newVersion;
}
}
これは、asynctaskからバージョンを取得するための私のコードです
VersionChecker versionChecker = new VersionChecker();
try
{ String appVersionName = BuildConfig.VERSION_NAME;
String mLatestVersionName = versionChecker.execute().get();
if (versionChecker.compareVersionNames(appVersionName, mLatestVersionName) == -1)
{
showAppUpdateDialog();
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
コードを置き換えるだけです
.get()
.select("div[itemprop=softwareVersion]")
.first()
.ownText();
以下で:
.get()
.select(".hAyfc .htlgb")
.get(3)
.ownText();
それが動作します..!
GoogleはAPIを「softwareVersion」から「currentVersion」に変更し、「。hAyfc.htlgb」を使用して同じバージョンを取得できます。
以下のコードは機能しません。
latestVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + context.getPackageName() + "&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();
上記のコードの代わりに、このコードを追加するだけで、正常に機能します。
Document document = Jsoup.connect("https://play.google.com/store/apps/details?id=" + context.getPackageName() + "&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();
if(document != null) {
if(document.select(".hAyfc .htlgb").get(5) != null) {
latestVersion = document.select(".hAyfc .htlgb").get(5).ownText();
} else {
latestVersion = currentVersion;
}
}
Note: There is no official API to get the current application version from Google Play. So use the above code to get the current version. Sometimes get(5).ownText() will change as google is updating the Google Play site. [Previously it was working with get(2).ownText()].
この2行を変更します
_{
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")
....
_
_BuildConfig.APPLICATION_ID
_を使用していますが、_package_name
_が必要です
BuildConfig
はGradleによって提供されます。 Gradle
を使用してビルドしていない場合、BuildConfig
を使用してパッケージ名にアクセスすることはできません。
結果はビルドパラメータの定数ではなくオペレーティングシステムから提供されるため、Context.getPackageName()
を使用します。
この問題は、要素div [itemprop = softwareVersion]
がGooglePlayウェブサイトで見つからなくなったために発生します(したがって、バージョン番号を返さなくなりました)。この要素は、ウェブサイトでgoogleが行った変更を加えた新しいクエリにのみ変更する必要があります。
注:構造を再度変更する場合は、このコードを変更する必要があることに注意してください。
お役に立てば幸いです
public class VersionChecker extends AsyncTask<String, String, String> {
private String newVersion;
@Override
protected String doInBackground(String... params) {
try {
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + "trai.gov.in.dnd" + "&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(".xyOfqd .hAyfc:nth-child(4) .htlgb span")
.get(0)
.ownText();
} catch (IOException e) {
e.printStackTrace();
}
return newVersion;
}
}
Codigo Java
VersionChecker versionChecker = new VersionChecker();
try {
String latestVersion = versionChecker.execute().get();
String versionName = BuildConfig.VERSION_NAME.replace("-DEBUG","");
if (latestVersion != null && !latestVersion.isEmpty()) {
if (!latestVersion.equals(versionName)) {
showDialogToSendToPlayStore();
}else{
continueWithTheLogin();
}
}
Log.d("update", "Current version " + Float.valueOf(versionName) + ", Playstore version " + Float.valueOf(latestVersion));
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
これを試してみてください
コードを置き換えます、
.get()
.select("div:containsOwn(Current Version)")
.next()
.text();
あなたはそれをAsyncTaskに入れる必要があります
//********* Check for Updated Version of APP
private class GetVersionCode extends AsyncTask<Void, String, String> {
String currentVersion = null;
@Override
protected String doInBackground(Void... voids) {
String newVersion = null;
try {
currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + Activity.this.getPackageName() + "&hl=it")
.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 newVersion;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String onlineVersion) {
super.onPostExecute(onlineVersion);
if (onlineVersion != null && !onlineVersion.isEmpty()) {
if (!currentVersion.equalsIgnoreCase(onlineVersion)) {
//Todo code here
}
}
Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);
}
}