在我的应用程序中,我想检查应用程序商店中是否有任何更新版本的应用程序。如果有,则必须通过警报消息通知用户,如果他/她选择升级我想更新新版本。我想通过我的应用程序完成所有这些。这可能吗?
答案 0 :(得分:13)
我遇到了同样的问题但是由JSOUP库解决了。 这是图书馆下载链接:http://jsoup.org/download
String 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();
Log.e("new Version", newVersion);
答案 1 :(得分:6)
Google没有为此提供任何API。
尽管如此,您可以在Playstore的网络版上发出http请求(https://play.google.com/store/apps/details?id=your.namespace)
要发出请求,您可以使用DefaultHttpClient
获得页面内容后,您应该对其进行解析(jsoup是一个很好的解决方案)并搜索:
<div class="content" itemprop="softwareVersion"> 2.2.0 </div>
找到页面的这一部分后,您可以提取版本号并将其与应用中可用的版本号进行比较:
try
{
String version = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
if( ! version.equals(versionFromHTML))
{
Toast.makeText(this, "New version available on play store", Toast.LENGTH_SHORT);
}
}
catch (NameNotFoundException e)
{
//No version do something
}
对于HTML解析部分,请查看here
请记住,每个人都不会在同一时间看到新版本。传播可能需要一些时间(可能是因为缓存)。
答案 2 :(得分:2)
修改强>
确保您对INTERNET
文件拥有AndroidManifest.xml
权限。
<uses-permission android:name="android.permission.INTERNET"/>
将JSOUP
依赖项添加到您的模块build.gradle
。
dependencies {
compile 'org.jsoup:jsoup:1.10.2'
}
使用try and catch
围绕代码段并且不在主线程上运行它。
public class MainActivity extends AppCompatActivity {
String newVersion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new FetchAppVersionFromGooglePlayStore().execute();
}
class FetchAppVersionFromGooglePlayStore extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
try {
return
Jsoup.connect("https://play.google.com/store/apps/details?id=" + "com.directed.android.smartstart" + "&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[itemprop=softwareVersion]")
.first()
.ownText();
} catch (Exception e) {
return "";
}
}
protected void onPostExecute(String string) {
newVersion = string;
Log.d("new Version", newVersion);
}
}
}
我在github上发布了该项目的副本。
答案 3 :(得分:1)
Google Play已经这样做了。当您上传新版应用时,它会直接向您的用户发送提醒。如果用户在Google Play应用中启用了此选项,则会自动下载设备。
答案 4 :(得分:0)
我还有另一种解决方法,这就是我的做法。
HttpPost httppostUserName = new HttpPost("https://androidquery.appspot.com/api/market?app=com.supercell.clashofclans"); //your package name
HttpClient httpclient = new DefaultHttpClient();
HttpResponse responseUser = httpclient.execute(httppostUserName);
String responseStringUser = EntityUtils.toString(responseUser.getEntity(), HTTP.UTF_8);
Log.d(Constants.TAG, "Response: " + responseStringUser);
try {
JSONObject Json = new JSONObject(responseStringUser);
newVersion = Json.getString("version");
} catch (Exception e) {
e.printStackTrace();
}
如果您在浏览器中粘贴网址以查看结果,您将获得更清晰的视图。
答案 5 :(得分:0)
private void checkForUpdate() {
PackageInfo packageInfo = null;
try { packageInfo=getPackageManager().getPackageInfo(DashboardActivity.this.getPackageName(), 0);
int curVersionCode = packageInfo.versionCode
if (curVersionCode > 1) { // instead of one use value get from server for the new update.
showUpdateDialog();
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
答案 6 :(得分:0)
这对我有用。 添加此依赖项。
implementation 'org.jsoup:jsoup:1.8.3'
在onCreate()方法中,使用以下代码:
try {
String currentVersion="";
currentVersion = getApplicationContext().getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
Log.e("Current Version","::"+currentVersion);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
new GetVersionCode().execute();
创建类GetVersionCode:
private class GetVersionCode extends AsyncTask<Void, String, String> {
@Override
protected String doInBackground(Void... voids) {
String newVersion = null;
try {
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) {
Elements element = document.getElementsContainingOwnText("Current Version");
for (Element ele : element) {
if (ele.siblingElements() != null) {
Elements sibElemets = ele.siblingElements();
for (Element sibElemet : sibElemets) {
newVersion = sibElemet.text();
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return newVersion;
}
@Override
protected void onPostExecute(String onlineVersion) {
super.onPostExecute(onlineVersion);
if (onlineVersion != null && !onlineVersion.isEmpty()) {
if (onlineVersion.equals(currentVersion)) {
} else {
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
alertDialog.setTitle("Update");
alertDialog.setIcon(R.mipmap.ic_launcher);
alertDialog.setMessage("New Update is available");
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Update", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + context.getPackageName())));
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + context.getPackageName())));
}
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
}
Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);
}
}
答案 7 :(得分:0)
您可以使用Play Core Library应用内更新来解决此问题。您可以check for update availability和install them(如果可用的话)。
请注意,应用内更新仅适用于运行Android 5.0(API级别21)或更高版本的设备,并且要求您使用Play Core library 1.5.0或更高版本。
应用内更新与使用APK扩展文件(.obb文件)的应用不兼容。您可以选择flexible downloads或immediate updates,而Google Play会负责为您下载和安装更新。
dependencies {
implementation 'com.google.android.play:core:1.5.0'
...
}
答案 8 :(得分:0)
答案 9 :(得分:0)
更新2019 Android Dev Summit
Google推出了In-app updates lib。它可以在Lollipop +上运行,并且使您能够通过漂亮的对话框(FLEXIBLE)或强制性全屏消息(IMMEDIATE)要求用户进行更新。
应用内更新仅适用于运行 Android 5.0(API级别)的设备 21)或更高版本。