Google应用程序版本已更新

“`html

简介

在进行app开发时,大部分情况下我们需要将应用上传到第三方市场。然而,在上传到像Google这样比较特殊的市场时,我们如何在应用内部进行版本更新判断呢?如果你的应用有自己的后台服务,那么可以使用后台服务器来进行版本判断。但对于没有后台服务的开发者来说该怎么办呢?接下来,我们将讨论一种没有后台服务器的解决办法。
“`

检测版本更新

如何在Google Play市场上检测应用版本更新呢?由于Google并未提供直接的API或友好的链接来获取版本信息,但它提供了一个应用程序的地址,例如:https://play.google.com/store/apps/details?id=com.xxx.xxx。这里的com.xxx.xxx是您应用程序的包名。那么我们可以利用这个地址进行操作。通过在浏览器中打开该地址,我们可以获取到应用程序的详细信息,包括版本号。相信大家已经明白了具体操作步骤,在代码中直接请求该地址,并获取其中内容以检索出版本号。下面是具体实现代码:

```java
public class CheckVersionAsyncTask extends AsyncTask {
Context context;
String currentVersion; // Google Play 上的版本
String oldVersion;     // 目前的 app 版本
public CheckVersionAsyncTask(Context context, String version) {
this.context = context;
this.oldVersion = version;
}
@Override
protected Boolean doInBackground(String... params) {
boolean result = false;
String url = params[0];   //請在 excecute 時傳入你 google play 的 url 位置,不是 market 喔,要 http
HttpPost post = new HttpPost(url);
AndroidHttpClient client = AndroidHttpClient.newInstance(android);
BufferedReader reader = null;
try {
HttpResponse response = client.execute(post);
reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line;
String content =;
Pattern pattern= Pattern.compile(\softwareVersion\\\W*([\\d\\.]+));
while((line=reader.readLine()) != null){
Matcher matcher= pattern.matcher(line);
if(matcher.find()){
Log.v(ids, ver.: + matcher.group(1));
currentVersion=matcher.group(1);
}
content += line;
}
/*
* 檢查版本,在此使用的是我們自定的版本名稱 ,
* 並不是版本號
* 請特別注意這一點
*/
if(currentVersion.compareTo(oldVersion)>0)
result=true;
Log.v(ids, content);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
``` 
```java
private void updateApp() {
String packageName = context.getPackageName();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(market://details?id= + packageName));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
```
```java
/**
* 更新应用程序
*/
private void updateApp() {
String packageName = context.getPackageName();
// 创建跳转到应用商店的意图
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(market://details?id= + packageName));
// 设置标志位,以新任务的方式启动意图
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 启动意图,跳转到应用商店页面进行更新操作
startActivity(intent);
}
```  

这是解决链接问题的关键所在,为什么这样做就不再赘述。

实现

前面已经把方法都现实了,剩下的就是调用了,我们可以在任意地方调用如下方法获取版本比较,代码如下:

```java
private void checkUpdateApp() {
try {
String packageName = getPackageName();
//因为这个是Google的网址,所以请求的时候需要翻墙在能正常请求到数据(注:这个请求要保证本app已经上传到Google Play)
String url = https://play.google.com/store/apps/details?id= + packageName;
//TODO: 在此处添加代码逻辑
} catch (Exception e) {
e.printStackTrace();
}
}
```
```java
/**
* 检查更新应用程序
*/
private void checkUpdateApp() {
try {
String packageName = getPackageName();
// 由于该链接是Google的网址,所以在发送请求之前需要使用翻墙工具才能正常获取数据(注意:确保本应用已经上传至Google Play)
String url = https://play.google.com/store/apps/details?id= + packageName;
// TODO: 在此处添加代码逻辑
} catch (Exception e) {
e.printStackTrace();
}
}
```
```java
/**
* 检查更新应用程序
*/
private void checkUpdateApp() {
try{
String packageName = getPackageName();
// 由于该链接是 Google 的网址,因此在发送请求之前需要使用 VPN 才能正常获取数据(注意:请确保本应用已经上传至 Google Play)
String url =https://play.google.com/store/apps/details?id= +packageName;
// TODO: 在此处添加代码逻辑
}catch(Exception e){
e.printStackTrace();
}
}
```

参考文章

Android 应用程序版本更新检查功能已经上架至 Google Play

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注