/**<br />* 斷點續傳<br />* @param url<br />*/<br />private void duanDianXuChuan(final String url){<br />try {<br />Runnable r = new Runnable() {<br />@Override<br />public void run() {<br />getRemoteFile(url);<br />}<br />};<br />new Thread(r).start();<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />}<br />/**<br />* 下載遠端檔案<br />* @param urlString<br />*/<br />private void getRemoteFile(String urlString){<br />try{<br />File file;<br />if(mCurSize == 0){<br />file = File.createTempFile(fileNa, fileEx);<br />currentTempFilePath = file.getAbsolutePath();<br />Log.e(“andy”,file.getName() + ” has exists.”);<br />} else {<br />file = new File(currentTempFilePath);<br />FileInputStream fis = new FileInputStream(file);<br />mCurSize = fis.available();<br />Log.e(“andy”,file.getName() + ” has ” + mCurSize + ” bytes.”);<br />}<br />URL url = new URL(urlString);<br />HttpURLConnection httpConnection = (HttpURLConnection) url<br />.openConnection();<br />httpConnection.setRequestProperty(“User-Agent”, “NetFox”);<br />String sProperty = “bytes=” + mCurSize + “-”;<br />httpConnection.setRequestProperty(“RANGE”, sProperty);<br />InputStream is = httpConnection.getInputStream();<br />Log.e(“andy”,”mTempFileName = ” + mTempFileName);<br />/*將檔案寫入暫存檔*/<br />FileOutputStream fos = new FileOutputStream(file, true);<br />byte buf[] = new byte[512];<br />do<br />{<br />int numread = is.read(buf);<br />if (numread <= 0)<br />{<br />mHandler.sendEmptyMessageDelayed(this.DOWNLOAD_FINISH, 0);<br />break;<br />}<br />mCurSize += numread;<br />mHandler.sendEmptyMessageDelayed(this.UPDATE_DOWNLOAD_PROGRESS, 0);<br />Log.e(“andy”,”current size = ” + mCurSize);<br />fos.write(buf, 0, numread);<br />}while (mContinue);<br />/*開啟檔案進行安裝*/<br />if(mCurSize == mSize) {<br />mCurSize = 0;<br />openFile(file);<br />}<br />try<br />{<br />is.close();<br />}<br />catch (Exception ex)<br />{<br />Log.e(“andy”, “error: ” + ex.getMessage(), ex);<br />}<br />}catch(Exception e){<br />e.printStackTrace();<br />}<br />}<br />/**<br />* 獲得檔案長度<br />* @param urlString<br />* @return<br />*/<br />public long getFileSize(String urlString) {<br />int nFileLength = -1;<br />try {<br />URL url = new URL(urlString);<br />HttpURLConnection httpConnection = (HttpURLConnection) url<br />.openConnection();<br />httpConnection.setRequestProperty(“User-Agent”, “NetFox”);<br />int responseCode = httpConnection.getResponseCode();<br />if (responseCode >= 400) {<br />return -2; // -2 represent access is error<br />}<br />String sHeader;<br />for (int i = 1;; i++) {<br />sHeader = httpConnection.getHeaderFieldKey(i);<br />if (sHeader != null) {<br />if (sHeader.equals(“content-length”)) {<br />nFileLength = Integer.parseInt(httpConnection<br />.getHeaderField(sHeader));<br />break;<br />}<br />} else<br />break;<br />}<br />} catch (IOException e) {<br />e.printStackTrace();<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />return nFileLength;<br />}<br />/**<br />* 計算百分比<br />* @param p1<br />* @param p2<br />* @return<br />*/<br />public static String percent(double p1, double p2) {<br />String str;<br />double p3 = p1 / p2;<br />NumberFormat nf = NumberFormat.getPercentInstance();<br />nf.setMinimumFractionDigits(2);<br />str = nf.format(p3);<br />Log.e(“andy”,”percentage = ” + str);<br />return str;<br />}