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

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

[复制链接]
发表于 2015-3-30 16:38 | 显示全部楼层 |阅读模式
实现自动更新,手机无SD卡也可以,本人亲测。
device-2015-03-28-100623[1].png
9 t) D: ~" q5 m6 _ QQ截图20150328100812[1].png
5 m$ ^8 V2 C: Q3 H# ]0 m' Q% B: k2 A- }2 J  ~$ K( `& v% _! _
源码片段:$ i# \2 ~6 b, l' \3 `
  1.    int down_step = down_step_custom;// 提示step
    - d( h# M% b* z: G' f' J% i
  2.         int totalSize;// 文件总大小  _, @6 J! n+ u$ ^2 C( i! m7 x( V7 L
  3.         int downloadCount = 0;// 已经下载好的大小8 c+ U' o/ Z+ N8 p# e
  4.         int updateCount = 0;// 已经上传的文件大小
    " d6 F2 N6 S3 N$ r
  5.          
    0 h( f0 O1 B( ~
  6.         InputStream inputStream;
    " R$ U9 ^$ c. ~6 C; T* b
  7.         OutputStream outputStream;/ U, S4 ]' x& o' I' U7 `9 e

  8. + V( c" T: X$ d: W$ U& b+ p2 d
  9.         URL url = new URL(down_url);, F0 @. a  C% D5 O9 B1 W+ _
  10.         HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
    / Q3 v: P4 P+ h+ {
  11.         httpURLConnection.setConnectTimeout(TIMEOUT);8 m/ p$ K0 a, m/ e" F
  12.         httpURLConnection.setReadTimeout(TIMEOUT);
    ! m/ D: x, N. p) `8 M6 _
  13.         // 获取下载文件的size1 ^) N. m% ^- `' A: l- L/ F5 d
  14.         totalSize = httpURLConnection.getContentLength();
    , w) K; y- g- k
  15.          # L# M' m3 y6 f
  16.         if (httpURLConnection.getResponseCode() == 404) {& h+ N4 |" d3 H; _0 [" t/ S$ L9 G+ n0 X
  17.             throw new Exception("fail!");* ~  d6 U9 Y$ [- a% N
  18.             //这个地方应该加一个下载失败的处理,但是,因为我们在外面加了一个try---catch,已经处理了Exception,
      B: q: Q, |/ }$ O4 N+ h. L
  19.             //所以不用处理                        
    4 u" R! h$ n3 d+ `" w: r
  20.         }( b- C* f; j8 z2 x; j( Z
  21.          2 ~3 E' z' Z% i6 d- h/ h
  22.         inputStream = httpURLConnection.getInputStream();  x* X6 x9 K3 O- H
  23.         outputStream = new FileOutputStream(file, false);// 文件存在则覆盖掉. f" j2 N( z7 R) t! x+ F5 ]2 O9 w& c
  24.          ; g' p# P' D! Z3 C
  25.         byte buffer[] = new byte[1024];7 f$ G- a9 U# v& a# g
  26.         int readsize = 0;0 k6 F2 {. m9 e
  27.          2 f. G9 G6 `, b3 d7 |
  28.         while ((readsize = inputStream.read(buffer)) != -1) {# a; S3 e8 p$ R7 N( n: U5 o( }
  29.              - U5 y: j! I2 y8 N% j. G0 v
  30. //          /*********如果下载过程中出现错误,就弹出错误提示,并且把notificationManager取消*********/
    - I; r  Z5 }  T" N, |8 T
  31. //          if (httpURLConnection.getResponseCode() == 404) {
    * b' w; H. h& D/ F; `
  32. //              notificationManager.cancel(R.layout.notification_item);: t) u1 o4 `& U' a7 o
  33. //              throw new Exception("fail!");
    0 h2 a) I4 ~) z$ z+ d$ @" f% f
  34. //              //这个地方应该加一个下载失败的处理,但是,因为我们在外面加了一个try---catch,已经处理了Exception,# J; ^0 n! @3 w) J
  35. //              //所以不用处理                        
    8 }- D' V" |0 Z  G* ]" C2 T
  36. //          }
    5 K4 C* h% r8 M
  37.                         
    - e8 K- P1 K3 ^
  38.             outputStream.write(buffer, 0, readsize);
    7 f7 B$ r, o7 D* F% l2 j) o; v! C0 Q
  39.             downloadCount += readsize;// 时时获取下载到的大小
    ' j2 s+ ]" l0 c+ F
  40.             /*** 每次增张3%**/( _/ I8 |' e0 j* L
  41.             if (updateCount == 0 || (downloadCount * 100 / totalSize - down_step) >= updateCount) {
    + D3 o1 A- p7 r$ Q) P+ X
  42.                 updateCount += down_step;- y9 q  U7 N' U  W
  43.                 // 改变通知栏* \. A! K8 F6 i& `9 S# O) I+ q
  44.                 contentView.setTextViewText(R.id.notificationPercent,updateCount + "%");+ o! E' o7 G& S$ `$ d" {
  45.                 contentView.setProgressBar(R.id.notificationProgress, 100,updateCount, false);          $ y5 v/ T7 i  q' u( @
  46.                 notification.contentView = contentView;6 X. p' U" b( T/ N1 E
  47.                 notificationManager.notify(R.layout.notification_item, notification);           
    : D& a7 c! _; g4 c
  48.             }9 H; J- N. t! C8 C4 E  r
  49.         }
    " o/ Y- U- m1 D( G6 s9 O
  50.         if (httpURLConnection != null) {: r- j, D, c" D
  51.             httpURLConnection.disconnect();
    0 {& p( y/ r/ J; s+ F
  52.         }* l0 K- d: M6 Y3 T! a7 F
  53.         inputStream.close();
    5 ~) _& h- m( o. q5 o. N5 P& t
  54.         outputStream.close();
    6 j$ `0 {7 a6 K6 X/ j
  55.          2 h! p- o6 f, @9 e& ~
  56.         return downloadCount;
    2 Q. ]8 L- Q  }
  57.    
复制代码

- M7 j& N4 f2 F. I% O: U1 M: S( Y
; q2 N$ ^( u# j) p8 H3 u6 c源码下载:
6 S1 z4 g; z' v, E/ \1 |
游客,如果您要查看本帖隐藏内容请回复

' I) Q. D2 b& N8 C* r8 O
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2001-2014Comsenz Inc.

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