package com.koushikdutta.urlimageviewhelper; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.URL; import java.util.ArrayList; import org.apache.http.NameValuePair; import android.content.Context; import android.os.AsyncTask; import com.hupu.games.common.SharedPreferencesMgr; import com.koushikdutta.urlimageviewhelper.UrlImageViewHelper.RequestPropertiesCallback; import com.mato.sdk.proxy.Proxy; public class HttpUrlDownloader implements UrlDownloader { private RequestPropertiesCallback mRequestPropertiesCallback; public RequestPropertiesCallback getRequestPropertiesCallback() { return mRequestPropertiesCallback; } public void setRequestPropertiesCallback(final RequestPropertiesCallback callback) { mRequestPropertiesCallback = callback; } @Override public void download(final Context context, final String url, final String filename, final UrlDownloaderCallback callback, final Runnable completion) { final AsyncTask<Void, Void, Void> downloader = new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(final Void... params) { try { InputStream is = null; String thisUrl = url; HttpURLConnection urlConnection = null; //如果maa 开启 那么图片下载也需要加速处理 while (true) { final URL u = new URL(thisUrl); //urlConnection = (HttpURLConnection)u.openConnection(); if (SharedPreferencesMgr.getInt("is_maa", 0) == 1) { if(Proxy.getAddress() != null) { String host = Proxy.getAddress().getHost(); int port = Proxy.getAddress().getPort(); java.net.Proxy proxy = new java.net.Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress(host,port)); urlConnection = (HttpURLConnection)u.openConnection(proxy); }else { urlConnection = (HttpURLConnection)u.openConnection(); } }else { urlConnection = (HttpURLConnection)u.openConnection(); } urlConnection.setInstanceFollowRedirects(true); if (mRequestPropertiesCallback != null) { final ArrayList<NameValuePair> props = mRequestPropertiesCallback.getHeadersForRequest(context, url); if (props != null) { for (final NameValuePair pair: props) { urlConnection.addRequestProperty(pair.getName(), pair.getValue()); } } } if (urlConnection.getResponseCode() != HttpURLConnection.HTTP_MOVED_TEMP && urlConnection.getResponseCode() != HttpURLConnection.HTTP_MOVED_PERM) break; thisUrl = urlConnection.getHeaderField("Location"); } if (urlConnection.getResponseCode() != HttpURLConnection.HTTP_OK) { UrlImageViewHelper.clog("Response Code: " + urlConnection.getResponseCode()); return null; } is = urlConnection.getInputStream(); callback.onDownloadComplete(HttpUrlDownloader.this, is, null); return null; } catch (final Throwable e) { e.printStackTrace(); return null; } } @Override protected void onPostExecute(final Void result) { completion.run(); } }; UrlImageViewHelper.executeTask(downloader); } @Override public boolean allowCache() { return true; } @Override public boolean canDownloadUrl(String url) { return url.startsWith("http"); } }