Я пытаюсь проверить во время выполнения, есть ли новая версия приложения из URL.Я развернул приложение в онлайн-домене, который выглядит примерно так www.test.com/androidapp/app_debug.apk
, и это автоматически загружает мое приложение.Что я пытаюсь сделать, это проверить по этой ссылке, если versionName
этого apk он совпадает с установленным, если нет, то я покажу Dialog
, который даст мне сообщение с новым versionName
ибудет иметь две кнопки Cancel && Update
.Я знаю, как сделать Dialog
, но я не знаю, как добиться этого взаимодействия между Url
и моим apk.
Я пробовал код из ответа от SO
, но до сих порне то, что я исключаю.Это ссылка, которую я пробовал.
Ответ на другой вопрос 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();