如何从网络检查 apk 的版本名称与设备上安装的 apk 在 Android Studio 中是否相同
How to check from a web if the versionName of apk with the installed apk at device it is the same or not in Android Studio
我正在尝试在运行时检查是否有来自 url 的应用程序的新版本。
我已经在类似 www.test.com/androidapp/app_debug.apk
的在线域部署了该应用程序,这会自动下载我的应用程序。
我想做的是检查这个 link 如果这个 apk 的 versionName
与安装的相同,如果不是,那么我将显示 Dialog
这将给我一个带有新 versionName
的消息,将有两个按钮 Cancel && Update
。
我知道如何执行 Dialog
但我不知道如何在 Url
和我的 apk 之间实现这种通信。
我已经从 SO
的答案中尝试了一些代码,但直到现在还不是我想要的。
这是我试过的link。
Answer from another question SO
这是我到目前为止所尝试的取决于@BryanIbrahim 的回答
在这里我得到应用程序的当前版本。
String getVersionFromUrl = "http://test.com/AndroidApp/text.txt";
//At text.txt I have only test.v1.0.2
URL u = null;
try {
u = new URL(path);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.connect();
InputStream in = c.getInputStream();
final ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
in.read(buffer); // Read from Buffer.
bo.write(buffer); // Write Into Buffer.
String getVersion = bo.toString().substring(12, 17);
String getVersionFromUrl = BuildConfig.VERSION_NAME;
if (!getVersionFromUrl.equals(getVersion)) {
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder1 = new AlertDialog.Builder(context);
builder1.setMessage("It is a new version of this app");
builder1.setCancelable(true);
builder1.setPositiveButton(
"Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder1.setNegativeButton(
"No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder1.show();
}
});
}
} catch (Exception e) {
Log.e("YourApp", "Well that didn't work out so well...");
Log.e("YourApp", e.getMessage());
}
return path;
}
@Override
protected void onPostExecute(String path) {
Intent i = new Intent();
String path2 = "http://test.com/AndroidApp/testv1.0.2.apk";
i.setAction(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(new File(path2)), "application/vnd.android.package-archive" );
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// mContext.startActivity(i);
}
}
在方法 onResume()
中我调用了这样的东西。
getVersionName gTV = new getVersionName(getApplicationContext());
gTV.execute();
您应该在域中设置应用程序的最新版本名称,例如 1.0.0,而不是简单地上传整个 apk。然后使用 PackageManager
检索 versionName 并将其与在线版本进行比较。
PackageManager packageManager = getPackageManager();
try {
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
String localVersionName = packageInfo.versionName;
//Compare with the online version
if(localVersionName != onlineVersionName){
//Update the app
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Jsoup 不适合您使用的目的。
最好将 json 文件上传到服务器并使用 okhttp
获取它。
示例:www.oye.com/update.json
您可以在其中设置版本信息、新增功能、URL 和其他信息。
否则,您将无法使用 jsoup 检查您的应用程序更新
答案已更新
服务器上的 JsonFile(示例:www.oye.com/update.json)
{ "name":"AppName", "size":"8mb", "url":"https://www.youall.com/update.apk", "version":"1.08" }
使用okhttp
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url("www.oye.com/update.json").build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
public void onResponse(Call call, final Response response)
throws IOException
{
JSONObject obj=new JSONObject(reponse.body().string);
if(obj.getDouble("version")>yourAppvrrsion){
//update avialable
}else{
//not avialable
}
}});
我正在尝试在运行时检查是否有来自 url 的应用程序的新版本。
我已经在类似 www.test.com/androidapp/app_debug.apk
的在线域部署了该应用程序,这会自动下载我的应用程序。
我想做的是检查这个 link 如果这个 apk 的 versionName
与安装的相同,如果不是,那么我将显示 Dialog
这将给我一个带有新 versionName
的消息,将有两个按钮 Cancel && Update
。
我知道如何执行 Dialog
但我不知道如何在 Url
和我的 apk 之间实现这种通信。
我已经从 SO
的答案中尝试了一些代码,但直到现在还不是我想要的。
这是我试过的link。
Answer from another question SO
这是我到目前为止所尝试的取决于@BryanIbrahim 的回答
在这里我得到应用程序的当前版本。
String getVersionFromUrl = "http://test.com/AndroidApp/text.txt";
//At text.txt I have only test.v1.0.2
URL u = null;
try {
u = new URL(path);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.connect();
InputStream in = c.getInputStream();
final ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
in.read(buffer); // Read from Buffer.
bo.write(buffer); // Write Into Buffer.
String getVersion = bo.toString().substring(12, 17);
String getVersionFromUrl = BuildConfig.VERSION_NAME;
if (!getVersionFromUrl.equals(getVersion)) {
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder1 = new AlertDialog.Builder(context);
builder1.setMessage("It is a new version of this app");
builder1.setCancelable(true);
builder1.setPositiveButton(
"Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder1.setNegativeButton(
"No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder1.show();
}
});
}
} catch (Exception e) {
Log.e("YourApp", "Well that didn't work out so well...");
Log.e("YourApp", e.getMessage());
}
return path;
}
@Override
protected void onPostExecute(String path) {
Intent i = new Intent();
String path2 = "http://test.com/AndroidApp/testv1.0.2.apk";
i.setAction(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(new File(path2)), "application/vnd.android.package-archive" );
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// mContext.startActivity(i);
}
}
在方法 onResume()
中我调用了这样的东西。
getVersionName gTV = new getVersionName(getApplicationContext());
gTV.execute();
您应该在域中设置应用程序的最新版本名称,例如 1.0.0,而不是简单地上传整个 apk。然后使用 PackageManager
检索 versionName 并将其与在线版本进行比较。
PackageManager packageManager = getPackageManager();
try {
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
String localVersionName = packageInfo.versionName;
//Compare with the online version
if(localVersionName != onlineVersionName){
//Update the app
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Jsoup 不适合您使用的目的。
最好将 json 文件上传到服务器并使用 okhttp
获取它。
示例:www.oye.com/update.json
您可以在其中设置版本信息、新增功能、URL 和其他信息。
否则,您将无法使用 jsoup 检查您的应用程序更新
答案已更新 服务器上的 JsonFile(示例:www.oye.com/update.json)
{ "name":"AppName", "size":"8mb", "url":"https://www.youall.com/update.apk", "version":"1.08" }
使用okhttp
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url("www.oye.com/update.json").build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
public void onResponse(Call call, final Response response)
throws IOException
{
JSONObject obj=new JSONObject(reponse.body().string);
if(obj.getDouble("version")>yourAppvrrsion){
//update avialable
}else{
//not avialable
}
}});