Genymotion模拟器Android 8.0 使用DowloadManager下载失败,Cursor返回的状态为“DownloadManager.STATUS_PENDING”,在真机上运行正常,在模拟器中就不行,模拟器wifi上网正常。
代码片段如下:
......
Uri uri = Uri.parse(jpgUrl);
// 创建一个下载请求对象,指定从哪个网络地址下载文件
Request down = new Request(uri);
// 设置允许下载的网络类型
down.setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI);
// 设置下载文件在本地的保存路径
down.setDestinationInExternalFilesDir(
DownloadImageActivity.this, Environment.DIRECTORY_DCIM, "test.jpg");
// 把下载请求对象加入到下载管理器的下载队列中
mDownloadId = mDownloadManager.enqueue(down);
......
// 创建一个下载查询对象,按照下载编号进行过滤
Query down_query = new Query();
// 设置下载查询对象的编号过滤器
down_query.setFilterById(mDownloadId);
// 向下载管理器发起查询操作,并返回查询结果集的游标
Cursor cursor = mDownloadManager.query(down_query);
while (cursor.moveToNext()) {
int statusIdx = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
int stauts = cursor.getInt(statusIdx);
switch (stauts) {
......
case DownloadManager.STATUS_SUCCESSFUL:
Log.d(TAG, String.format("run: status=%s", "STATUS_SUCCESSFUL"));
break;
case DownloadManager.STATUS_PENDING:
Log.d(TAG, String.format("run: status=%s", "STATUS_PENDING"));
break;
......
}
......
日志输出为"STATUS_PENDING",意思是下载任务被挂起。
解决办法:
将这一句:
// 设置允许下载的网络类型
down.setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI);
改为:
// 设置允许下载的网络类型
down.setAllowedNetworkTypes(Request.NETWORK_WIFI);
意思是只使用wifi下载,想必是加上“NETWORK_MOBILE ”会优先使用移动网络?然而模拟器上是没有移动网络的,所以就挂起了?但在模拟器Android 5.0、6.0中是正常的,应该是模拟器的bug吧。
问题:
在模拟器Android 9.0中仍然不行。