一.發展史 1G 模擬制式手機,只能進行語音通話2G 數字制式手機,增加接收數據等功能3G 智能手機,它已經成了集語音通信和多媒體通信相結合,並且包括圖像、音樂、網頁瀏覽、電話會議以及其它一些信息服務等增值服務的新一代移動通信系統4G 第四代移動通信技術, 4G是集3G與WLAN於一體,並能夠快速傳 ...
一.發展史
1G 模擬制式手機,只能進行語音通話
2G 數字制式手機,增加接收數據等功能
3G 智能手機,它已經成了集語音通信和多媒體通信相結合,並且包括圖像、音樂、網頁瀏覽、電話會議以及其它一些信息服務等增值服務的新一代移動通信系統
4G 第四代移動通信技術, 4G是集3G與WLAN於一體,並能夠快速傳輸數據、高質量、音頻、視頻和圖像等。4G能夠以100Mbps以上的速度下載
二.網路基礎
Android平臺有三種網路介面可以使用
標準Java介面 java.net.*(下麵例子使用)
Apache介面 org.apache.*(開源項目HttpClient)
Android網路介面 android.net.*
HTTP通信
HTTP 超文本傳輸協議 Hyper Text Transfer Protocol
採用請求/響應模式
Android提供了HttpURLConnection 和HttpClient介面
三.activity代碼
3.1下載網路圖像並保存到SD卡
public void downLoadImage2(View view){ new Thread(new Runnable() { @Override public void run() { try { URL url=new URL("http://pic23.nipic.com/20120918/10910345_133800468000_2.jpg"); //構建一個URL(java.net) HttpURLConnection conn= (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(10*1000);//設置連接超時時間 conn.setDoInput(true);//預設true,伺服器響應到客戶端的都是數據流 conn.connect(); //獲取伺服器響應的數據流 InputStream input=conn.getInputStream(); //構建一個輸出流,將下載的文件保存到SD卡指定位置 //構建要保存文件的位置 String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/gdnf_image/image_1.jpg"; File file=new File(path); if(!file.getParentFile().exists()) file.getParentFile().mkdirs(); OutputStream out=new FileOutputStream(file); byte[] bytes=new byte[1024]; for(int len=0;(len= input.read(bytes))!=-1;){ out.write(bytes,0,len); } out.flush(); out.close(); input.close(); //將下載到的圖像顯示出來 final Bitmap bitmap= BitmapFactory.decodeFile(path); //將圖像設置到ImageView中 runOnUiThread(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); }
3.2下載圖像並保存到安裝目錄下
//下載圖像並保存到安裝目錄下 Bitmap bitmap=null; public void downLoadImage3(View view){ //構建文件的位置 final String path= getApplicationContext().getFilesDir().getAbsolutePath()+"/user_images/user_2.jpg"; final File file=new File(path); if(file.exists()){ //調用工具類,讀取一張小圖 bitmap= BitMapUtils.getSmallBitmap(path); //bitmap=BitMapUtils.rotateBitmap(bitmap,180); imageView.setImageBitmap(bitmap); }else{ if(!file.getParentFile().exists()) file.getParentFile().mkdirs(); //開啟線程執行文件下載 new Thread(new Runnable() { @Override public void run() { try { URL url=new URL("http://pic66.nipic.com/file/20150513/20186525_100135381000_2.jpg"); //構建一個URL(java.net) HttpURLConnection conn= (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(10*1000);//設置連接超時時間 conn.setDoInput(true);//預設true,伺服器響應到客戶端的都是數據流 conn.connect(); //獲取伺服器響應的數據流 InputStream input=conn.getInputStream(); OutputStream out=new FileOutputStream(file); byte[] bytes=new byte[1024]; for(int len=0;(len= input.read(bytes))!=-1;){ out.write(bytes,0,len); } out.flush(); out.close(); input.close(); bitmap= BitmapFactory.decodeFile(path); //將圖像設置到ImageView中 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "下載圖像完成", Toast.LENGTH_SHORT).show(); imageView.setImageBitmap(bitmap); } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } }
涉及到到的工具類 BitMapUtils 代碼如下:
// 根據路徑獲得圖片並壓縮,返回bitmap用於顯示 public static Bitmap getSmallBitmap(String filePath) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true;//只載入圖像框架 BitmapFactory.decodeFile(filePath, options); // 計算該圖像壓縮比例 options.inSampleSize = calculateInSampleSize(options, 480, 800); //設置載入全部圖像內容 options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(filePath, options); }
3.3下載圖像並保存到安裝目錄下(判斷圖片是否存在)
public void downLoadImage4(View view){ String from="http://pic24.photophoto.cn/20120919/0036036482476741_b.jpg"; final String save=Environment.getExternalStorageDirectory().getAbsolutePath()+"/gdnf_image/body3.jpg"; if(!FileUtils.existsFile(save)) {//文件如果不存在,就下載 FileUtils.downLoadFile(from, save, new CallBack() { @Override public void success() { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(),"文件下載完畢",Toast.LENGTH_SHORT).show(); Bitmap bm=BitMapUtils.getSmallBitmap(save); imageView.setImageBitmap(bm); } }); } @Override public void failed() { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "文件下載失敗", Toast.LENGTH_SHORT).show(); } }); } }); }else{ Bitmap bm=BitMapUtils.getSmallBitmap(save); imageView.setImageBitmap(bm); } }
涉及到的工具類 existsFile() downLoadFile() getSmallBitmap()
public static boolean existsFile(String path){ if(path!=null&&path.length()>0) { File file = new File(path); if(file.exists()) return true; } return false; }
//執行下載文件到指定位置 public static void downLoadFile(final String fromPath, final String savePath, final CallBack callBack){ if(fromPath!=null&&savePath!=null){ new Thread(new Runnable() { @Override public void run() { try { URL url=new URL(fromPath); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); conn.setConnectTimeout(20*1000); conn.connect(); InputStream input=conn.getInputStream(); File file=new File(savePath); if(!file.getParentFile().exists()) file.getParentFile().mkdirs(); OutputStream out=new FileOutputStream(file); byte[] bytes=new byte[1024]; for(int len=0;(len=input.read(bytes))!=-1;){ out.write(bytes,0,len); } out.flush(); out.close(); input.close(); callBack.success();//下載成功 } catch (Exception e) { e.printStackTrace(); callBack.failed();//下載失敗 } } }).start(); } }
final CallBack callBack自定義一個回調函數
public interface CallBack { public void success(); public void failed(); }