asynchttpclient(下载图片)

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.csdn.net/xinzheng_wang/article/details/38925731

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值