Ошибка синтаксического анализа при загрузке и запуске файла .apk

У меня есть функция в моем приложении, которая позволяет пользователю загружать новую версию.
Но моя проблема в том, что когда я запускаю намерение, которое должно запустить процесс установки, появляется сообщение:

Ошибка разбора. При синтаксическом анализе пакета возникла проблема

это мой код

Button button;
String urlApp = "example.com/app.apk"
String fileName = "app.apk";
DownloadManager downloadManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            File file = new File(Environment.DIRECTORY_DOWNLOADS, fileName);
            if (file.exists()){
                boolean deleted = file.delete();
                Toast.makeText(getApplicationContext(), "Deleted", Toast.LENGTH_SHORT).show();
            }

            downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(urlApp));
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setTitle("Click to update");
            downloadManager.enqueue(request);
            registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

        }
    });

}

private void openFile() {
    Intent install = new Intent(Intent.ACTION_VIEW);
    install.setDataAndType(Uri.fromFile(new File(Environment.DIRECTORY_DOWNLOADS+"/"+fileName)),
            "application/vnd.android.package-archive");
    startActivity(install);
}

BroadcastReceiver onComplete = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        openFile();
    }
};

}

Это только для файлов .apk, файлы .txt работают нормально. В логарифме нет ни одной ошибки. Удаление также не работает, но это не моя основная проблема.

Заранее спасибо

Извините, если это глупая проблема, но я впервые работаю с менеджером загрузок.


person Dan    schedule 14.02.2016    source источник
comment
Это все так странно... Магазин Google Play обрабатывает обновления для вас. Итак, зачем использовать другой, пользовательский, ненадежный метод?   -  person Phantômaxx    schedule 15.02.2016
comment
Конечно, я мог бы это сделать, но я хочу сделать это сам   -  person Dan    schedule 15.02.2016
comment
Наверняка это может быть отличным упражнением. Но также и большая трата времени, если вы хотите быть продуктивным!   -  person Phantômaxx    schedule 15.02.2016
comment
Я делаю это просто для удовольствия, поэтому я не так много внимания уделяю продуктивности.   -  person Dan    schedule 15.02.2016


Ответы (2)


Хорошо, я наконец решил это

Вместо:

install.setDataAndType(Uri.fromFile(new File(Environment.DIRECTORY_DOWNLOADS+"/"+fileName)),
        "application/vnd.android.package-archive");

я использовал

    install.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/"+fileName)),
            "application/vnd.android.package-archive");
person Dan    schedule 25.02.2016
comment
Я получаю ту же ошибку, что и вы, ОП. Но этот ответ на самом деле не помогает, потому что в более новых версиях Android вы не можете использовать подход getExternalStorage.... См. это: stackoverflow.com/a/40936215/2583765. - person birgersp; 20.05.2021

Я столкнулся с той же проблемой ранее.

Пожалуйста, проверьте минимальный уровень API для вашей новой версии приложения и уровень API используемого вами устройства.

person Saumik Bhattacharya    schedule 15.02.2016
comment
MinSdkVersion — 19, targetSdkVersion — 23, и мое устройство также имеет skdVersion 23. - person Dan; 15.02.2016