请选择 进入手机版 | 继续访问电脑版
查看: 5968|回复: 0

[Android开发资源分享] Android源码应用:自动更新

[复制链接]
发表于 2015-3-30 16:38 | 显示全部楼层 |阅读模式
实现自动更新,手机无SD卡也可以,本人亲测。
device-2015-03-28-100623[1].png ' F4 f+ U+ Q( A& ]
QQ截图20150328100812[1].png
6 a5 V) K8 f& W  o; |8 R, q, J' x# g* U* ^" S' g* k, `
源码片段:
, }9 N% K. [8 ~
  1.    int down_step = down_step_custom;// 提示step5 o( d% f( a* k. c) E  T
  2.         int totalSize;// 文件总大小* ?, \3 S  e0 m" f
  3.         int downloadCount = 0;// 已经下载好的大小
    ! q) N; ~$ @+ p8 u3 I/ N9 j
  4.         int updateCount = 0;// 已经上传的文件大小
    8 N4 n: `) v9 J- ?3 k7 y4 w
  5.          
    1 l7 j2 i2 |1 ]% Q9 w
  6.         InputStream inputStream;, F. B3 b: j0 _) z$ l& Q2 X  C
  7.         OutputStream outputStream;
    ) G" w; r7 G) u" V. L* D6 y

  8. % W! g3 b/ {- M' k
  9.         URL url = new URL(down_url);
    : ?+ p& s8 s7 W1 \* _- s- ^
  10.         HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();, w1 ]: |/ ~" S
  11.         httpURLConnection.setConnectTimeout(TIMEOUT);, [3 b; u" P( T: P7 F0 B
  12.         httpURLConnection.setReadTimeout(TIMEOUT);+ b. T' V2 `5 i' \/ X$ k. H' Z/ y
  13.         // 获取下载文件的size- e# j  p9 U' |; a4 h
  14.         totalSize = httpURLConnection.getContentLength();. B6 [, i! v' Q1 m! d) M% G
  15.          
    % v3 _3 c$ p$ T. D. H$ _* [; \5 X2 _, D
  16.         if (httpURLConnection.getResponseCode() == 404) {
    2 T0 u5 C* H0 p2 T
  17.             throw new Exception("fail!");
    & }# k: q2 `  @3 b& ?2 v& S) D
  18.             //这个地方应该加一个下载失败的处理,但是,因为我们在外面加了一个try---catch,已经处理了Exception,
      q4 b( ?: n) c, Z/ w: Y# B
  19.             //所以不用处理                        9 ]- c' ~2 w" X
  20.         }: b, p* ]8 Q* D) G1 U
  21.          
    " L* v1 G  X# g' l) s. d+ N
  22.         inputStream = httpURLConnection.getInputStream();
    4 H2 V  F4 w0 G9 r  l: o: D
  23.         outputStream = new FileOutputStream(file, false);// 文件存在则覆盖掉
    4 M" ^' ~* n! t" ^
  24.          . p2 L, W/ S2 b: C& g9 w0 ]1 o
  25.         byte buffer[] = new byte[1024];  |" u7 Z) r9 x5 V: r0 E
  26.         int readsize = 0;( z: Q4 J5 y% H* Q8 B
  27.          8 J+ ^: Q% O6 y
  28.         while ((readsize = inputStream.read(buffer)) != -1) {
    1 a) j7 z; S% R) L3 ^" b6 p
  29.             
    5 d: q2 h$ R, y( k( P
  30. //          /*********如果下载过程中出现错误,就弹出错误提示,并且把notificationManager取消*********/
    ( |% A7 A$ g# ~+ Q0 q9 j1 V- z2 Z
  31. //          if (httpURLConnection.getResponseCode() == 404) {
    6 r+ I3 I5 i) v
  32. //              notificationManager.cancel(R.layout.notification_item);
    / @0 E: D$ J/ `
  33. //              throw new Exception("fail!");
    1 y, ?$ ~% J% ~
  34. //              //这个地方应该加一个下载失败的处理,但是,因为我们在外面加了一个try---catch,已经处理了Exception,
    " ~! F& B! L; N" B& i1 k7 Q; s' k
  35. //              //所以不用处理                        
    ) q. s5 Y4 \* x( ?
  36. //          }
    - C6 n* M8 v9 v/ k% ~( J
  37.                         
    & k& V$ M9 @" O' u
  38.             outputStream.write(buffer, 0, readsize);
    0 `% t$ [; V- R7 H. Z
  39.             downloadCount += readsize;// 时时获取下载到的大小
    : I8 r- j3 w3 ?# F* C
  40.             /*** 每次增张3%**/
    0 p8 _' I* W/ V5 m9 U2 E  J
  41.             if (updateCount == 0 || (downloadCount * 100 / totalSize - down_step) >= updateCount) {6 {% c8 N8 y4 p8 V& k: i
  42.                 updateCount += down_step;" ?" `+ u( v3 s1 T( G+ V! T) F
  43.                 // 改变通知栏
    5 t8 `" B* k7 S: N
  44.                 contentView.setTextViewText(R.id.notificationPercent,updateCount + "%");5 m8 }6 b0 ~8 y9 W/ E8 d* f& \  }
  45.                 contentView.setProgressBar(R.id.notificationProgress, 100,updateCount, false);          ' ]: g. K8 H5 p% n) W* n$ _
  46.                 notification.contentView = contentView;
    6 l; I3 ]* y5 x- k5 d: N, t+ b' ~
  47.                 notificationManager.notify(R.layout.notification_item, notification);           
    . T; Y/ A8 J% u4 D# L5 T: H
  48.             }7 Q0 A( N% q$ q7 [$ m) A
  49.         }
    ( Z) u' b  j  R  L
  50.         if (httpURLConnection != null) {
      f% g; e9 L8 m! q4 o3 I
  51.             httpURLConnection.disconnect();
    5 n9 i, C2 O; r  P
  52.         }0 e5 o) y- W# t4 @* J/ s
  53.         inputStream.close();
    ' A) h! x  ^# G5 ]
  54.         outputStream.close();
    " A2 F3 B5 f* i1 J, s- _, U& A
  55.          5 F% t4 M5 a2 L' [; K
  56.         return downloadCount;! n5 Z- Y+ O. m2 \) `
  57.    
复制代码

! W0 v/ Z9 A8 u+ Z; r) B
, O1 M* L' I7 i% e2 X! Y/ J' ]! c源码下载:3 W. v- i8 `) p: _. f/ b
游客,如果您要查看本帖隐藏内容请回复

) w( h* S9 ~" l* m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2001-2014Comsenz Inc.

快速回复 返回顶部 返回列表