如何检查文件是否已下载并运行其安装?我有一个代码:
public void downloadUpdate(String url){
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setDescription("Downloading...");
request.setTitle("App Update");
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
String name = URLUtil.guessFileName(url, null, MimeTypeMap.getFileExtensionFromUrl(url));
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, name);
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
3条答案
按热度按时间oo7oh9g91#
若要检查下载管理器是否下载了该文件,必须实现BroatcastReceiver。
但是,我不确定您是否可以以编程方式安装APK。出于安全考虑,我认为你不能。对于应用程序更新,我认为你应该使用谷歌版本控制。当你重新部署你的应用程序使用不同的版本号,用户应该能够自动更新(除非用户在Google Play关闭).希望这会有所帮助。
更新
您不需要调用我提到的方法。你只需要在你的manifest xml文件中声明你的广播接收器,下载完成后DownloadManager会调用。xml看起来像下面这样:
deikduxw2#
这是一个相对简单的方法。它为我工作:您需要在manifest文件中添加
<receiver>
标记,如下所示:这将为下载完成的事件注册广播接收器。这将在下载完成后立即调用类中的
onReceive()
方法。请记住,您需要extend
BroadcastReceiver类,而不是implement
它。我声明了一个布尔变量作为切换来检查下载完成。因此,你的Java类应该是这样的:要等待或检查是否已从任何其他类完成下载,请在所需的适当位置使用以下简单代码:
但请记住,如果需要在项目中多次检查它,则需要事先重置
isDownloadComplete
的值。wpx232ag3#
如果您希望系统在下载完成时通知您,您可以使用
BroadcastReceiver
解决方案。但是,如果你想手动获取下载的状态,你可以使用此代码,你不需要向清单文件添加接收器。
注意:该接口是出于测试目的而添加的,如果您愿意,可以放弃它。