ion是的一个安卓异步网络和图片加载库。
特性
异步下载:
下载图片 (用ImageViews 或者 Bitmaps显示);
下载JSON文件 (通过Gson解析);
下载字符串;
下载文件;
Fluent API;
当呼叫活动(calling Activity)结束时,可以自动取消网络操作。
所有的操作都返回一个Future(http://en.wikipedia.org/wiki/Futures_and_promises),并且可以取消;
HTTP POST/PUT;
缓存;
Gzip/Deflate 压缩
当有多个IP地址时,自动选择最好最稳定的服务器连接; 9. 支持Cookies 等等。
Github 项目地址为: ion github
Eclipse jar包导入形式:
需要使用到两个jar 分别为: androidasync.jar 和 Ion.jar
个人测试 下载文件部分代码如下:
public static void NewDownload(RequestParams params,final Context mcontext,final BaseInfo t){
progressBar = new ProgressBar(mcontext);
progressDialog = new ProgressDialog(mcontext);
LogCat.i(Constants.getLogTag(), Constants.getRequestHost()+t.getDownloadUrl());
final NotificationManager nm = (NotificationManager) mcontext.getSystemService(Context.NOTIFICATION_SERVICE);
final Notification.Builder builder = new Notification.Builder(mcontext);
builder.setWhen(System.currentTimeMillis()).setContentTitle(t.getName()+ "下载中").setContentText(t.getVersionName());
builder.setLargeIcon(bitmap);
builder.setSmallIcon(R.drawable.download_icon);
File file = Environment.getExternalStorageDirectory();
File file2 = new File(file, "down");
file2.mkdir();
file2 = new File(file2,t.getName()+ ".apk");
Ion.with(mcontext).load(Constants.getRequestHost()+t.getDownloadUrl()).progressBar(progressBar).progressDialog(progressDialog)
.progress( new ProgressCallback() {
@Override
public void onProgress( long downloaded, long total) {
builder.setProgress(( int)(total/(1024*1024)), (int)downloaded/(1024*1024), false);
builder.setContentText(downloaded/(1024*1024)+ "."+downloaded%(1024*1024)+ "M"+ " / " + (total/(1024*1024))+"."+(total%(1024*1024))+"M" );
Intent intent = new Intent(mcontext,DownloadingActivity.class );
Bundle bundle = new Bundle();
bundle.putLong( "downloaded", downloaded);
bundle.putLong( "total", total);
bundle.putSerializable( "appInfo", t);
intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendintent= PendingIntent.getActivity(mcontext, Notification_id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendintent);
Notification notification = builder.getNotification();
nm.notify(Notification_id, notification);
}
}).write(file2).setCallback( new FutureCallback<File>() {
@Override
public void onCompleted(Exception e, File file) {
if (e == null) {
AppUtil.install(mcontext, Environment.getExternalStorageDirectory()+File.separator+"down" +File.separator+t.getName()+".apk");
nm.cancel(Notification_id);
} else{
Utils.showToast(mcontext, "下载失败,请稍后重试" );
nm.cancel(Notification_id);
}
}
});
}
根据请求,使用Notification的形式动态展示 当前下载进度展示,并设定了 PendingIntent ,点击Notification时,跳转特定页面,并展示当前下载进度。