asynchttpclient - github地址:
https://github.com/loopj/android-async-http
使用的jar是 : android-async-http-1.4.8
场景:
下载网络上的图片,保存到sd卡,并且使用通知栏显示下载的进度。
可以中断下载任务(没找到暂停的功能)
效果
Mainactivity
package com.example.testmutidownload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import org.apache.http.Header;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.BinaryHttpResponseHandler;
import com.loopj.android.http.ResponseHandlerInterface;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button bt1;
private Button bt2;
private Button bt3;
private AsyncHttpClient client;
private BinaryHttpResponseHandler handlerInterface;
private boolean isDownloading = false;
private String url = "http://pic32.nipic.com/20130829/12906030_124355855000_2.png";
// 指定文件类型
private String[] allowedContentTypes = new String[] { "image/png",
"image/jpeg" };
// 下载到
private String tempPath = Environment.getExternalStorageDirectory()
.getPath() + "/temp.jpg";
//
private NotificationManager notificationManager;
private Notification notification;
// TAG
private String DOWNLOAD_PIC = "DOWNLOAD_PIC";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (notificationManager == null) {
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
bt1 = (Button) findViewById(R.id.button1);
bt2 = (Button) findViewById(R.id.button2);
bt3 = (Button) findViewById(R.id.button3);
// 开始下载
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!isDownloading) {
if (client == null) {
client = new AsyncHttpClient();
// 设置线程池
}
// 开始下载
client.get(getApplicationContext(), url, handlerInterface); // 如果没有传入Context,cancelRequests不起作用
} else {
// 不做处理
}
}
});
// 暂停下载
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (client != null) {
// 没有找到暂停的方法
}
}
});
// 中断下载
bt3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (client != null) {
// 取消所有请求
// client.cancelRequests(getApplicationContext(), true);
// 通过回调对象的TAG来取消请求
client.cancelRequestsByTAG(DOWNLOAD_PIC, true);
}
}
});
// 初始化回调对象
if (handlerInterface == null) {
handlerInterface = new BinaryHttpResponseHandler(
allowedContentTypes) {
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] binaryData) {
isDownloading = false;
// 转换下载的内容
Bitmap bmp = BitmapFactory.decodeByteArray(binaryData, 0,
binaryData.length);
File file = new File(tempPath);
// 压缩格式
CompressFormat format = Bitmap.CompressFormat.JPEG;
// 压缩比例
int quality = 100;
try {
// 若存在则删除
if (file.exists())
file.delete();
// 创建文件
file.createNewFile();
//
OutputStream stream = new FileOutputStream(file);
// 压缩输出
bmp.compress(format, quality, stream);
// 关闭
stream.close();
Log.v("TAG", "下载完成~");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] binaryData, Throwable error) {
isDownloading = false;
Log.v("TAG", "下载失败:" + error.getMessage());
}
@SuppressWarnings("deprecation")
@Override
public void onProgress(long bytesWritten, long totalSize) {
Log.v("TAG", (int)(((float)bytesWritten / (float)totalSize) * 100) + "%");
// 通知栏
String context = "正在下载..." + (int)(((float)bytesWritten / (float)totalSize) * 100) + "%";
if (notification == null) {
notification = new Notification(R.drawable.ic_launcher, context,System.currentTimeMillis());
}
// Intent intent = new Intent();
// PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT);
// /* pi为当用户进入下拉页面点击item时的意图,实例化pi时第二个参数一般不用,设置为0即可 */
// notification.setLatestEventInfo(MainActivity.this, "下载",context, pi);
// 点击通知栏没有反应
notification.setLatestEventInfo(MainActivity.this, "下载",context, null);
notificationManager.notify(0, notification);
}
};
handlerInterface.setTag(DOWNLOAD_PIC);
}
}
}
权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.INTERNET" />
转载于:
http://blog.youkuaiyun.com/xinzheng_wang/article/details/38925731