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);    }}

聽聽聽鍦ˋndroidManifest.xml娉ㄥ唽姝ゆ帴鏀跺櫒锛屽涓嬶細
                            

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android(安卓)VideoView设置静音,Android
  2. android:scrollbarStyle属性及滚动条和分
  3. Android(安卓)XML文件解析
  4. RK3326 Android(安卓)8.1 为自己的APK的
  5. Android(安卓)Studio在Gradle中隐藏Keyst
  6. Android中做一个无标题窗口
  7. Android笔记--handler机制
  8. Android定时器的使用,
  9. 创建 cocos2d-x+lua for android 步骤
  10. 用网络adb连接调试Android