У нас есть приложение, которое используется только в нашей компании.В настоящее время мы используем приведенный код для обновления приложения.Это позволяет получить доступ к файлу на сервере, который имеет два числа, разделенных запятыми.Первая - это текущая versionCode
последней доступной версии, а вторая - самая ранняя versionCode
, которой пользователю разрешено работать.Если они используют слишком старую версию, они должны обновить или закрыть приложение.
public class UpdateApp extends MainActivity {
public void check(final Context c) {
RequestQueue queue = Volley.newRequestQueue(c);
StringRequest stringRequest = new StringRequest(Request.Method.GET, getText(R.string.ver_uri).toString(),
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
String[] v = response.split(",");
if (Integer.parseInt(v[0]) > BuildConfig.VERSION_CODE) {
AlertDialog.Builder builder = new AlertDialog.Builder(c);
builder.setMessage("An update is available").setTitle(R.string.app_name);
builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// UPDATE button pressed
// url to download APK
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(getText(R.string.apk_uri).toString());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage("com.android.chrome");
try {
c.startActivity(intent);
} catch (ActivityNotFoundException ex) {
// Chrome browser presumably not installed so allow user to choose instead
intent.setPackage(null);
c.startActivity(intent);
}
}
});
if (Integer.parseInt(v[1]) <= BuildConfig.VERSION_CODE) {
builder.setNegativeButton("Not Now", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// NOT NOW button pressed
}
});
}
AlertDialog dialog = builder.create();
dialog.show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(c.getApplicationContext(), "Network error - please try later", Toast.LENGTH_LONG).show();
}
});
stringRequest.setShouldCache(false);
queue.add(stringRequest);
}
}
Этот модуль обновления вызывается, когда приложение начинает использовать new UpdateApp().check(this);
.точка, но пользователь все еще должен фактически установить новый APK.Я ищу способ автоматической установки APK после того, как пользователь решил загрузить новый APK.Я знаю, что устройство должно разрешать установку из неизвестных источников для этого.