package com.express.express.util;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Map.Entry;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
public class HttpHelper {
/**
* 利用android 下载管理器 下载文件
*
* @param context
* @param apkName
* @param uri
* http或https
* @return 如果已经下载过返回-1,否则返回Download ID
*/
public static long download(Context context, String apkName, Uri uri) {
File dir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File apkFile = new File(dir, apkName);
if (apkFile.exists()) {
ApplicationHelper.installApk(context, Uri.fromFile(apkFile));
return -1;
}
Toast.makeText(context, "已经转入后台下载!", Toast.LENGTH_SHORT).show();
DownloadManager manager = (DownloadManager) context
.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
| DownloadManager.Request.NETWORK_WIFI);
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setAllowedOverRoaming(false);
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, apkName);
Log.v("Download", "Download DIR:+" + Environment.DIRECTORY_DOWNLOADS);
long id = manager.enqueue(request);
SharedPreferences sp = context.getSharedPreferences(Constant.SP_USER,
Context.MODE_PRIVATE);
sp.edit().putLong(Constant.DOWNLOAD_ID, id).commit();
return id;
}
/**
* http POST 请求
*
* @param url
* http请求
* @param content
* 请求正文,正文内容其实跟get的URL中'?'后的参数字符串一致
* @return
* @throws IOException
*/
public static String requestPost(String urlString, String content)
throws IOException {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(6 * 1000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
conn.connect();
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(content);
out.flush();
out.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream(), "utf-8"));
String line;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
conn.disconnect();
return sb.toString();
}
/**
* http Post请求 ,参考 {@link #requestPost(String,String)
* requestPost(String,String)}
*
* @param urlString
* 请求url
* @param map
* 封装了正文内容的map
* @return
* @throws IOException
*
*/
public static String requestPost(String urlString, Map<String, String> map)
throws IOException {
String content = "";
for (Entry<String, String> en : map.entrySet()) {
String key = en.getKey();
String value = URLEncoder.encode(en.getValue(), "utf-8");
if (!"".equals(content)) {
content += "&";
}
content += key + "=" + value;
}
return requestPost(urlString, content);
}
/**
* http GET 请求
*
* @param url
* @return
* @throws IOException
*/
public static String requestGet(String url) throws IOException {
URL getUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) getUrl
.openConnection();
connection.setConnectTimeout(6 * 1000);
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "utf-8"));
String line;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
return sb.toString();
}
/**
* 读取图片
* @param url 图片url
* @return Bitmap
* @throws IOException
*/
public static Bitmap getBitmap(String url) throws IOException {
HttpURLConnection conn = (HttpURLConnection) new URL(url)
.openConnection();
conn.setConnectTimeout(6000);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bitMap = BitmapFactory.decodeStream(is);
is.close();
return bitMap;
}
}