"Ошибка парсера" после загрузки обновления в андроид
Я разрабатываю приложение для Android, которое при загрузке обновления предлагает пользователю установить. Но он показывает "Ошибка синтаксического анализатора: возникла проблема при синтаксическом анализе пакета." После успешной загрузки файла.
Ниже приведен мой код для загрузки обновления через менеджер загрузок:
public void startDownload(String url)
{
filename = url.substring(url.lastIndexOf("/") + 1, url.length());
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
Log.i("Downloaded filename", filename); request.setDestinationInExternalPublicDir(Environment.getExternalStorageState(), "Upgrade Download/"+ filename);
Log.i("Download Path", Environment.getExternalStorageState() + "/Upgrade Download/" + filename);
request.allowScanningByMediaScanner();
request.setMimeType("application/vnd.android.package-archive"); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// Start download
DownloadManager dm = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
dm.enqueue(request);
IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
activity.registerReceiver(onComplete, intentFilter);
}
И в BroadcastReceiver он показывает всплывающее окно для установки приложения.
BroadcastReceiver:-
BroadcastReceiver onComplete = new BroadcastReceiver()
{
public void onReceive(Context ctxt, Intent intent)
{
File file = new File(Environment.getExternalStorageState() + "/Upgrade Download", filename);
Log.i("open filename",""+ file.getPath());
Log.i("intent",""+ intent);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctxt.startActivity(i);
}
};
Пожалуйста, предоставьте мне решение вышеуказанной проблемы. Спасибо.
1 ответ
Спасибо за ваши "полезные" комментарии, выяснили проблему. "DownloadReference = downloadManager.enqueue(request);" передает идентификатор загрузки, который должен быть проверен в BroadcastReceiver
В методе startDownload(url):-
long downloadReference = downloadManager.enqueue(request);
В BroadcastReceiver:-
public void onReceive(Context ctxt, Intent intent)
{
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (downloadReference == referenceId)
{
DownloadManager downloadManager = (DownloadManager) ctxt.getSystemService(Activity.DOWNLOAD_SERVICE);
Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType(downloadManager.getUriForDownloadedFile(referenceId),
"application/vnd.android.package-archive");
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctxt.startActivity(i);
}
}