私はをMainActivity
に聞いて、onReceive
の方法でapkを開いて放送受信機を登録しました。ダウンロードマネージャを使用してapkをダウンロードしてアプリケーションを更新しようとしています。ダウンロードマネージャを使用してアプリケーション間でAndroidアップデートアプリを再起動します(複数回のダウンロードは避けてください)
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)
がUI内のボタンのクリック時に呼び出されます。 以下はコードです。 ボタンをクリックすると、ダウンロードが開始されます。ダウンロードを開始した後、アプリケーションが閉じられている(受信者が登録解除されている)と言いますが、アプリが再び起動される2つのシナリオに問題があります。 downloadReference
が失われ、私の受信機は、放送を受信したとき、referenceId
は文句を言わないので、installIntent
が開始されることはありませんdownloadReference
と同じにすること - 私のアプリを再起動した後
以前のダウンロードが完了します。だから もう一度[更新]ボタンをクリックしてダウンロードを開始する必要があります。 この問題を回避する方法はありますか?
私のアプリが再起動される前に前回のダウンロードが完了しました。 - 私の前回のダウンロードが完了したことを知る方法は、新しく開始されたアクティビティ です。もう一度ボタンをクリックしてダウンロードを再開する必要があります。 ブロードキャストをダウンロードマネージャにブロードキャストする方法はありますか?