Iam пытается обновить мое приложение, загрузив apk с помощью диспетчера загрузки. Я зарегистрировал широковещательный приемник для прослушивания DownloadManager.ACTION_DOWNLOAD_COMPLETE
в MainActivity
и откройте apk в методе onReceive
. Ниже приводится код:Приложение для обновления Android через приложение перезагружается с помощью DownloadManager (во избежание загрузки нескольких раз)
public class MainActivity extends CordovaActivity {
private long downloadReference;
private DownloadManager downloadManager;
private IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerReceiver(downloadReceiver, intentFilter);
}
public void updateApp(String url) {
//start downloading the file using the download manager
downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
Uri Download_Uri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
request.setAllowedOverRoaming(false);
request.setDestinationInExternalFilesDir(MainActivity.this, Environment.DIRECTORY_DOWNLOADS, "myapk.apk");
downloadReference = downloadManager.enqueue(request);
}
@Override
public void onDestroy() {
//unregister your receivers
this.unregisterReceiver(downloadReceiver);
super.onDestroy();
}
private BroadcastReceiver downloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//check if the broadcast message is for our Enqueued download
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (downloadReference == referenceId) {
//start the installation of the latest version
Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType(downloadManager.getUriForDownloadedFile(downloadReference),
"application/vnd.android.package-archive");
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(installIntent);
}
}
};
}
updateApp(url)
вызывается нажатием кнопки в интерфейсе. Теперь после нажатия кнопки начинается загрузка. Допустим, приложение закрыто (приемник незарегистрирован) после запуска загрузки, у меня проблема с двумя сценариями, когда приложение запускается снова.
Предыдущая загрузка завершится после того, как мое приложение перезапускается -
downloadReference
теряется и когда мой приемник принимает передачу, тоreferenceId
обыкновение быть такой же, какdownloadReference
, такinstallIntent
никогда не начал. Итак, Мне нужно снова нажать кнопку «Обновить» и начать загрузку. Есть Есть ли способ избежать этой проблемы?Предыдущая загрузка завершена до перезагрузки моего приложения. Невозможно узнать, что моя предыдущая загрузка завершена в вновь запущенном действии. Снова я должен нажать кнопку и возобновить загрузку. Есть ли способ включить липкую версию для диспетчера загрузки?