Android瀛︿範绯诲垪(19)--App绂荤嚎涓嬭浇
Android瀛︿範绯诲垪(19)--App绂荤嚎涓嬭浇
聽 聽 聽聽瀹滄湭闆ㄨ€岀桓缂紝姣嬩复娓磋€屾帢浜曘€?---鏈辩敤绾€婃不瀹舵牸瑷€銆?/p>
聽 聽 聽 绂荤嚎涓嬭浇锛屽湪鏈夌綉缁滅殑鎯呭喌涓嬩笅杞芥湇鍔″櫒鏁版嵁锛屼互渚挎棤缃戠粶鏃朵篃鑳介槄璇伙紝灏辨槸绂荤嚎闃呰銆?/p>
聽 聽 聽 绂荤嚎涓嬭浇鐨勫姛鑳界偣濡備笅锛?br>聽 聽 聽 1.涓嬭浇绠$悊(寮€濮嬨€佸彇娑堜笅杞?銆?br>聽 聽 聽 2.缃戠粶鍒ゆ柇(Wi-Fi,3G)銆?br>聽 聽 聽 3.鐙珛杩涚▼銆?br>聽 聽 聽 4.瀹氭椂鍜屾墜鏈哄偓閱掋€?br>聽 聽 聽 5.鑷惎鍔ㄣ€偮?/p>
1.涓嬭浇绠$悊
聽 聽 聽 聽杩欓噷涓嶄究鍏虫敞涓嬭浇鐨勭粏鑺傛柟娉曪紝缃戠粶涓嬭浇鐨勬柟娉曞緢澶氾紝澶ф濡備笅锛?/p>
/** * 涓嬭浇鏂囦欢 * @param url 涓嬭浇鍦板潃 * @param dest 涓嬭浇瀛樻斁鐨勬湰鍦版枃浠? * @param append 鏂偣缁紶 * @return * @throws Exception */public long download(String url, File dest, boolean append) throws Exception{ //鍒濆鍖栧彉閲? //鍑嗗宸ヤ綔 // ... ... try { // ... ... while((readSize = is.read(buffer)) > 0){ //缃戠粶鍒ゆ柇 os.write(buffer, 0, readSize); os.flush(); //濡傛灉闇€瑕佸仠姝笅杞斤紝濡傚彇娑堬紝璺冲嚭褰撳墠涓嬭浇 } } } finally { // ... ... } // ... ...}
聽
聽 聽 聽 杩欓噷瑕佹敞鎰忓嚑鐐癸細
聽 聽 聽 (1).鍦ㄤ笅杞界殑鏃跺€欙紝鎴戜滑甯屾湜鑳藉強鏃舵娴嬪埌缃戠粶鐘跺喌锛屾瘮濡傜敱Wi-Fi鍒囨崲鍒?G缃戠粶涓嬶紝鎴戜滑搴旇鑳藉強鏃跺仠姝笅杞姐€?br>聽 聽 聽 (2).褰撶敤鎴烽€夋嫨鍙栨秷涓嬭浇鐨勬椂鍊欙紝鎴戜滑涔熻兘鍋滄褰撳墠涓嬭浇銆偮?/p>
2.缃戠粶鍒ゆ柇
聽 聽 聽 鑾峰彇褰撳墠缃戠粶鐘舵€侊紝涓昏鍒嗕负Wi-Fi鍜孧obile(鍖呮嫭3G锛孏PRS)涓ょ锛屾垜浠啓涓€涓伐鍏风被濡備笅锛?/p>
public class NetworkUtils { public final static int NONE = 0;//鏃犵綉缁? public final static int WIFI = 1;//Wi-Fi public final static int MOBILE = 2;//3G,GPRS /** * 鑾峰彇褰撳墠缃戠粶鐘舵€? * @param context * @return */public static int getNetworkState(Context context){ ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); //鎵嬫満缃戠粶鍒ゆ柇 State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState(); if(state == State.CONNECTED||state == State.CONNECTING){ return MOBILE; } //Wifi缃戠粶鍒ゆ柇 state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); if(state == State.CONNECTED||state == State.CONNECTING){ return WIFI; } return NONE; }}
聽
聽聽 鏍规嵁缃戠粶鐘舵€侊紝鎴戜滑鑳藉鎺у埗涓嬭浇鏂瑰紡:聽 聽 聽 (1).涓嬭浇閲忓緢澶х殑鎯呭喌涓嬶紝鎴戜滑涓嶅ぇ鍙兘鍦?G鎯呭喌涓嬭繘琛屼笅杞斤紝瀹规槗寮曡捣鐢ㄦ埛鐨勫弽鎰熷拰鎷呭咖銆?
聽 聽 聽 (2).褰撳鎴峰崄鍒嗙‘璁ゅ彲浠ュ湪3G鎯呭喌涓嬭繘琛屼笅杞斤紝閭d箞涔熸槸鍏佽鐨勩€?
聽 聽 聽 鎵€浠ワ紝杩欓噷鎻愬嚭涓€涓渶姹傦紝鎴戜滑瑕佷负涓嬭浇鏂瑰紡璁剧疆涓€涓伒娲荤殑绛夌骇锛岀粨鍚堢绾夸笅杞界殑鐗圭偣锛屾垜浠粰鍑?涓柟妗堢敱鐢ㄦ埛閫夋嫨锛?
聽 聽 聽 (1).绉诲姩鏁版嵁鎯呭喌涓嬭嚜鍔ㄤ笅杞?
聽 聽 聽 (2).鍙厑璁竁i-Fi鎯呭喌涓嬭嚜鍔ㄤ笅杞?
聽 聽 聽 (3).鍏抽棴涓嬭浇
聽 聽 聽 杩欓噷鍙垪鍑轰簡鑷姩涓嬭浇锛屾槸鍥犱负濡傛灉涓嶆槸鑷姩涓嬭浇锛屾墜鍔ㄤ笅杞界敤鎴峰彲浠ラ殢鎰忔帶鍒讹紝鏃犻渶璁剧疆锛屽綋鐒惰璁″埌涓㈡祦閲忔儏鍐典笅锛屽3G涓嬫墜鍔ㄤ笅杞斤紝鎻愮ず鐢ㄦ埛浼氭秷鑰楄緝澶х殑鏁版嵁娴侀噺锛屾厧鐢ㄥ嵆鍙€?
public class Constant {//绂荤嚎涓嬭浇缃戠粶璁剧疆public final static int OFFLINE_MOBILE = 0;public final static int OFFLINE_WIFI = 1;public final static int OFFLINE_OFF = 3;}public class Global {//璁剧疆榛樿鍏抽棴鐘舵€侊紝//涓轰簡搴旂敤绋嬪簭涓嬫鍚姩鑳藉璁颁綇鐢ㄦ埛閫夋嫨锛屽湪绗竴娆″惎鍔ㄥ簲鐢ㄧ殑鏃跺€欙紝杩欎釜鍊兼渶缁堝簲璇ュ瓨鏀惧埌鏁版嵁搴撲腑锛?public static int OfflineNetworkSetting = Constant.OFFLINE_OFF;}
聽 聽 聽 聽 鐜板湪鍙互鏍规嵁瑙勫垯姣旇緝褰撳墠缃戠粶鍜岀绾跨綉缁滆缃紝鍒ゅ畾绂荤嚎涓嬭浇鏈嶅姟鐨勫紑鍚€?/p>
3.鐙珛杩涚▼
聽 聽 聽 绂荤嚎涓嬭浇锛屾棤璁轰綍鏃朵綍鍦帮紝鍙閫傚疁杩涜锛屽垯褰撹繘琛岋紝鐩墠涓绘祦鐨勫仛娉曟槸寤虹珛鍚庡彴鏈嶅姟銆?/p>
public class OfflineSerivice extends Service { // ... ...}
聽
(1).OfflineService鐨勮繘绋嬪鏋滈粯璁ゅ拰搴旂敤绋嬪簭涓€鑷达紝鍒欏湪搴旂敤杩涚▼kill鐨勬椂鍊欙紝浼氶噸鍚竴娆?缃戞槗鏂伴椈鍦ㄧ绾夸笅杞界殑鏃跺€欙紝閫€鍑哄簲鐢紝涓嬭浇浼氬仠椤夸竴灏忎細鍎垮氨鏄繖涓師鍥?锛屽鏋滃奖鍝嶄笉澶э紝杩欎釜鏂规涔熸槸鍙€夌殑銆?聽 聽 聽(2).OfflineService鐨勮繘绋嬪拰搴旂敤绋嬪簭鍒嗗紑锛屽搴旂敤绋嬪簭杩涚▼涓?cn.cnblogs.tianxia.download"锛屽垯绂荤嚎涓嬭浇鏈嶅姟鐨勮繘绋嬭缃负"cn.cnblogs.tianxia.download.offline"锛屾拠娓呭拰搴旂敤绋嬪簭鐨勮繘绋嬬殑鍏崇郴銆傚綋鐒讹紝杩欎釜浼氬甫鏉ヤ竴涓柊鐨勯棶棰橈紝杩涚▼闂撮€氫俊锛屽綋鐒跺洜涓虹绾夸笅杞藉拰搴旂敤绋嬪簭闂寸殑妯″潡姣旇緝鐙珛锛岃繖涓棶棰樿繕绠楁瘮杈冨ソ瑙勯伩銆?
聽 聽 聽(3).OfflineService鐨勮繘绋嬪鏋滈粯璁ゅ拰搴旂敤绋嬪簭涓€鑷达紝浣嗘槸OfflineService缁ф壙IntentService锛屽彲閬垮厤閲嶅惎鐨勯棶棰橈紝杩欎釜鏄€奝ro Android 3銆嬩功涓彁鍒扮殑鏂规硶锛岄潪甯哥殑濂界敤锛屼絾鏄潪甯搁仐鎲撅紝鏈汉鏈€杩戞墠鐪嬪埌锛屾殏鏃舵病鏈変翰鎵嬫祴楠岋紝涓嶆暍鍦ㄥ伐浣滀腑璇曠敤銆?
聽 聽 聽鎸夌悊璇达紝鏂规3鏄渶浣虫柟妗堬紝 浣嗘槸涓汉鍘熷洜锛岄€夋嫨浜嗘柟妗?.
聽
4.瀹氭椂涓嬭浇鍜屾墜鏈哄偓閱?/strong>
聽 聽 聽鏍规嵁鐢ㄦ埛璁剧疆锛屽湪wifi鐨勬儏鍐典笅鑷姩涓嬭浇锛屼絾鏄嚜鍔ㄤ笅杞界殑鏂规鏈夊緢澶氱锛岄绻佺殑鏇存柊涓嬭浇锛屽畾鐐逛笅杞?鏃╀笂8鐐癸紝涓嬪崍4鐐?锛岄棿闅斾笅杞?姣忛殧6灏忔椂)銆?br>聽 聽 聽杩欓噷锛屾垜浠€夋嫨姣忛殧6涓皬鏃朵笅杞姐€?br>聽 聽 聽(1).杩欓噷浠嬬粛涓€绉嶉敊璇殑鏂规銆備竴鐪嬪埌姣忛殧6灏忔椂锛屽緢瀹规槗鎯冲埌寮€鍚竴涓瓙绾跨▼璁℃椂锛岀疮璁″埌6涓皬鏃讹紝瀛愮嚎绋嬮€氱煡涓嬭浇鏈嶅姟寮€濮嬫柊涓€杞笅杞姐€傝繖涓柟妗堢殑鎬濊矾鏄病鏈夐敊鐨勶紝浣嗘槸鍗村拷鐣ヤ簡鎵嬫満澶勪簬浼戠湢鐘舵€侊紝杩欎釜瀛愮嚎绋嬪叾瀹炴槸鍋滄鎵ц鐨勶紝閭d箞鎵€璋撶殑6涓皬鏃剁殑鏁堟灉灏卞張鍙兘姘歌繙杈句笉鍒帮紝鑰屼笖蹇呯劧涓嶆纭垨鑰呬笉鍑嗙‘銆?br>聽 聽 聽(2).鎵€浠ワ紝闇€瑕佷娇鐢ㄥ埌涓€绉嶄笉浼戠湢鐨勫姙娉曪細瀹氭椂鍣ㄥ拰骞挎挱鎺ユ敹鍣ㄣ€傛瘡闅?灏忔椂鎴戜滑鍙戦€佷竴涓箍鎾紝骞挎挱鎺ユ敹鍣ㄩ€氱煡寮€濮嬬绾夸笅杞姐€?鍙弬鑰僴ewsrob婧愮爜鍜屼功绫嶃€奝ro Android 3銆?:
public class OfflineSerivice extends Service { //涓婃鎴愬姛涓嬭浇鐨勬椂闂? private long lastDownloadTime; // 鐪佺暐浠g爜... ... public static void startAlarm(Context context){ AlarmManager alarmManager = (AlarmManager) context.getSystemService("alarm"); //姣忛殧6涓皬鏃跺彂閫佸箍鎾埌OfflineAlarmReceiver //涔熷彲浠ヨ缃负10鍒嗛挓妫€娴嬩竴涓嬩笅杞芥潯浠讹紝鑰屽湪OfflineAlarmRecrive涓垽鏂紑濮嬩笅杞斤紝閬垮厤6灏忔椂涓嬭浇澶辫触闇€鍐嶇瓑寰?灏忔椂杩囬暱鏃堕棿鐨勯棶棰? Intent intent = new Intent(context,OfflineAlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, 0); alarmManager.cancel(pendingIntent); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 3600000*6, pendingIntent); }}
聽
聽 OfflineAlarmRecriver涓鐞嗗紑濮嬩笅杞芥潯浠讹紝骞堕€氱煡寮€濮嬩笅杞斤細public class OfflineAlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent arg1) { // 鐪佺暐浠g爜...,鍒濆鍖栧彉閲忥紝鍑嗗宸ヤ綔... if(System.currentTimeMillis()-OfflineService.lastDownloadTime>3600000*60&&鍏朵粬鏉′欢){ //鎵撳紑绂荤嚎涓嬭浇鏈嶅姟 Intent alarmIntent = new Intent(context, OfflineService.class); context.startService(alarmIntent); } }}
聽 聽 聽 聽鍓嶉潰鎴戜滑鎻愬埌浜嗙嚎绋嬩紤鐪犵殑闂锛岄渶瑕佸湪涓嬭浇鐨勬椂鍊欒兘澶熷敜閱掓墜鏈猴紝涓嬭浇瀹屾垚鍚庤兘鍥炲埌浼戠湢鐘舵€侊紝涓嬮潰鏄袱涓伐鍏锋柟娉曪細
public static PowerManager.WakeLock wakeLock;/** * 鍞ら啋鏈嶅姟 */public static void acquireWakeLock(Context context){ if(wakeLock!=null){ return; } PowerManager powerManager = (PowerManager)(context.getSystemService(Context.POWER_SERVICE)); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "com.cnblogs.download.OfflineService"); wakeLock.acquire();}/** * 閲婃斁鍞ら啋鏈嶅姟锛岃繑鍥炰紤鐪犵姸鎬? */public static void releaseWakeLock(){ if(wakeLock!=null&&wakeLock.isHeld()){ wakeLock.release(); wakeLock = null; }}
聽
聽鍏朵腑 PowerManager.PARTIAL_WAKE_LOCK鎰忔€濇槸浠?/span>鍞ら啋 CPU鏂瑰紡锛屾鏃惰兘鑷姩涓诲姩妫€娴嬬綉缁滅姸鎬侊紝浠庤€屼繚璇佺綉缁滄甯搞€?br>闇€瑕佸湪Mainifest.xml涓缃潈闄愶細聽鐒跺悗鍦ㄤ笅杞芥湇鍔$殑onStartConmmand()婵€娲诲偓閱掔姸鎬侊紝鐒跺悗鍦ㄤ笅杞藉畬鎴愬悗閲婃斁鍌啋鐘舵€?
@Overridepublic int onStartCommand(Intent intent, int flags, int startId) { acquireWakeLock(OfflineService.this); //鐪佺暐浠g爜... ...return super.onStartCommand(intent, flags, startId);}
聽 5.鑷惎鍔?/strong> 聽
聽 聽 聽 涓轰簡浠g爜娓呮櫚锛屾垜浠啀瀹氫箟涓€涓嚜鍚姩鐨剅eceiver锛?/p> /** * 鑷惎鍔ㄧ绾夸笅杞芥湇鍔? * @author user */public class OfflineReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent arg1) { //鍚姩瀹氭椂鍣? OfflineService.startAlarm(context); }}
更多相关文章
随机推荐