Для тех, кто придет сюда в будущем: проверьте версию сохраненного 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 загружается, приложение вылетает = /

Итак, мне не хватает разрешений, или мой код неверен, или есть лучший способ сделать это?

Ответы на вопрос(0)

Ваш ответ на вопрос