利用 DownloadManager做版本更新的例子有很多,推荐使用:
http://www.jianshu.com/p/bb4cde6e88c6#
但是集成的时候会遇到一个问题,
Unknown URL : content://downloads/my_downloads/2
解决方案:(我们需要把路径改为file://开头的)
将之前查找下载好的apk文件的代码
Uri downloadFileUri = manager.getUriForDownloadedFile(downId);
File file = new File(new URI(downloadFileUri.toString()));
改为通过downId来查询DownloadManager下载的[数据库]的记录,然后查找本地文件的路径,如下所示:
Cursor c = downloadManager.query(new DownloadManager.Query().setFilterById(downId));
if(c != null){
c.moveToFirst();
int fileUriIdx = c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);
String fileUri = c.getString(fileUriIdx);
String fileName = null;
//Android 7.0以上的方式:请求获取写入权限,这一步报错
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
if (fileUri != null) {
fileName = Uri.parse(fileUri).getPath();
}
} else {
//过时的方式:DownloadManager.COLUMN_LOCAL_FILENAME
int fileNameIdx = c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);
fileName = c.getString(fileNameIdx);
}
File file = new File(fileName);
同时解决DownloadManager.COLUMN_LOCAL_FILENAME会在7.0及以上版本过时的问题 。
参考文章:
http://blog.csdn.net/ouyang_peng/article/details/62891782