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

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

[复制链接]
发表于 2015-3-30 16:38 | 显示全部楼层 |阅读模式
实现自动更新,手机无SD卡也可以,本人亲测。
device-2015-03-28-100623[1].png
! i- e3 O* b* r+ g" D# Q! a QQ截图20150328100812[1].png : A& c* J" ]2 n5 D% R
9 R; r0 P+ f. m
源码片段:
( t# m4 U1 C$ \0 W# k9 t4 D
  1.    int down_step = down_step_custom;// 提示step0 i9 d3 o- u5 [9 g
  2.         int totalSize;// 文件总大小
    1 e& {9 T; G* K# l# B* H) \
  3.         int downloadCount = 0;// 已经下载好的大小/ M- q0 e/ Z5 a' a0 b, W* P4 C
  4.         int updateCount = 0;// 已经上传的文件大小4 h' ?. {7 e' ^+ e
  5.          
    5 l8 f* H3 ^9 \5 r& B5 C
  6.         InputStream inputStream;: H" t+ n) o4 m* Z6 u% R
  7.         OutputStream outputStream;
    # K, r5 f9 B* H% n/ p) s; O4 t; r

  8. % }( }. i/ Z& x+ q
  9.         URL url = new URL(down_url);( W  W3 N0 K: t1 m. a8 Q* I
  10.         HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();$ D$ i( G0 I- j7 Z
  11.         httpURLConnection.setConnectTimeout(TIMEOUT);
    1 y4 q5 P  X, c4 x0 y
  12.         httpURLConnection.setReadTimeout(TIMEOUT);- c6 J8 ^" s6 v6 F  ~0 C: a' ]
  13.         // 获取下载文件的size
    & n+ c' D+ D) M% j. m; B' M6 r
  14.         totalSize = httpURLConnection.getContentLength();
    3 u: ?* ]* g2 @' s) i4 z
  15.          
    8 `' R; T2 c3 k! y  |  w+ }0 I5 G
  16.         if (httpURLConnection.getResponseCode() == 404) {
    $ {8 U' A- i: t$ G6 m) R) P
  17.             throw new Exception("fail!");
    : X& X! a; O1 U; y' k, q4 a" ^2 P
  18.             //这个地方应该加一个下载失败的处理,但是,因为我们在外面加了一个try---catch,已经处理了Exception,
    / E0 v# O2 J7 m" o. k
  19.             //所以不用处理                        
    2 R; q! R. V% e' y
  20.         }  i& D7 m2 k9 T2 C+ M0 x
  21.          
    6 W, x, M" T' l4 W: a7 n# ]
  22.         inputStream = httpURLConnection.getInputStream();+ R) z( [6 i5 n/ L
  23.         outputStream = new FileOutputStream(file, false);// 文件存在则覆盖掉
    ' V" Z7 f: E- |% A+ E* V
  24.          $ t! P5 W; o3 j3 |
  25.         byte buffer[] = new byte[1024];5 `  n' \. ]. q
  26.         int readsize = 0;
    7 s8 J0 e# ~8 j; T  H
  27.          , N% |% [7 J* ^2 \( T5 d
  28.         while ((readsize = inputStream.read(buffer)) != -1) {: Q+ R* Z1 D" z9 @) c0 S2 F7 M
  29.              % W6 A# ^$ b2 \4 B! A& e4 W
  30. //          /*********如果下载过程中出现错误,就弹出错误提示,并且把notificationManager取消*********/
    * [) N% ~# _7 z* F
  31. //          if (httpURLConnection.getResponseCode() == 404) {% m: U2 Z* j) c& R
  32. //              notificationManager.cancel(R.layout.notification_item);
    3 _& y6 ~- v+ t
  33. //              throw new Exception("fail!");2 v& q8 h* _2 A. t
  34. //              //这个地方应该加一个下载失败的处理,但是,因为我们在外面加了一个try---catch,已经处理了Exception,
    ( W7 ]% ?4 g0 L% ~
  35. //              //所以不用处理                        
    / h2 s" u0 k* C+ U3 `: L8 K
  36. //          }
    2 [; |, Y& w  _2 W6 `/ l
  37.                          ; z9 G; ~$ W; [1 _) I% V
  38.             outputStream.write(buffer, 0, readsize);; v8 x0 L: v% J+ g" M
  39.             downloadCount += readsize;// 时时获取下载到的大小* q  K* w; O; k5 ?
  40.             /*** 每次增张3%**/% G7 y) d1 w, L! A' t
  41.             if (updateCount == 0 || (downloadCount * 100 / totalSize - down_step) >= updateCount) {- e( ~6 b1 ^4 F& b; y
  42.                 updateCount += down_step;
    & d0 }5 I* X, f( h( {1 p
  43.                 // 改变通知栏
    " e/ `( ~( e# U5 o3 V3 R2 a
  44.                 contentView.setTextViewText(R.id.notificationPercent,updateCount + "%");3 ^9 _' P- L6 {
  45.                 contentView.setProgressBar(R.id.notificationProgress, 100,updateCount, false);          ) S: e- _* [. R: d+ C( {# Q, U
  46.                 notification.contentView = contentView;+ X2 {8 y( ~" j3 O- I# H( e% D; p
  47.                 notificationManager.notify(R.layout.notification_item, notification);           
    0 P* d  u4 {$ Q) o: F
  48.             }; ^; l2 m1 ~8 `, ?+ f7 w( L, b
  49.         }
    * y# k7 N' J, n% ?, P
  50.         if (httpURLConnection != null) {% x0 m4 q, U) j! n
  51.             httpURLConnection.disconnect();: q0 [' P$ x& i( x4 m
  52.         }
    1 f% i1 s' |* H4 u% o
  53.         inputStream.close();
    : W2 y9 M% @( k9 Q
  54.         outputStream.close();
    , Y; T( W, v  O  b2 P, G# \5 D
  55.          ( _8 B& @2 k9 [3 _3 Q  d
  56.         return downloadCount;9 t4 |3 j* z/ R0 c& T8 f
  57.    
复制代码
! c7 W0 O6 B9 S8 S: U1 ^( O

/ p1 ^  ]9 S2 G. C9 |$ S! T6 `9 r源码下载:
& K1 L; M, ~# h  l! S6 Q+ n
游客,如果您要查看本帖隐藏内容请回复
3 {$ s) w& n( ^! `. K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2001-2014Comsenz Inc.

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