Для тех, кто придет сюда в будущем: проверьте версию сохраненного apk, проверьте версию с сервера и проверьте установленную версию, если все одинаково, не о чем беспокоиться. Вы загружаете только с сервера, когда server_version> сохранен на SD-карте, и устанавливаете только тогда, когда sd_card> установлена версия, просто чтобы помочь
от вопрос уже есть ответ здесь:
Установить приложение программно на Android 15 ответовЯ сделал это с помощьюПроблемы с загрузкой двоичных файлов на Android а такжеУстановить приложение программно на Android.
Я хочу сделать автообновление и автоустановку сразу. Это местное, так что это нерыночное приложение.
Вот мой код для этого:
public void Update(String apkurl){
try {
URL url = new URL(apkurl);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
String PATH = Environment.getExternalStorageDirectory() + "/download/";
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, "app.apk");
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();//till here, it works fine - .apk is download to my sdcard in download file
Intent promptInstall = new Intent(Intent.ACTION_VIEW)
.setData(Uri.parse(PATH+"app.apk"))
.setType("application/android.com.app");
startActivity(promptInstall);//installation is not working
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Update error!", Toast.LENGTH_LONG).show();
}
}
Мои разрешенияINTERNET
, WRITE_EXTERNAL_STORAGE
, INSTALL_PACKAGES
, а такжеDELETE_PACKAGES
.
Когда НамерениеpromptInstall
загружается, приложение вылетает = /
Итак, мне не хватает разрешений, или мой код неверен, или есть лучший способ сделать это?