十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開(kāi)發(fā)_APP開(kāi)發(fā),低調(diào)、敢創(chuàng)新、有情懷!
      南昌百恒網(wǎng)絡(luò)微信公眾號(hào) 掃一掃關(guān)注
      小程序
      tel-icon全國(guó)服務(wù)熱線:400-680-9298,0791-88117053
      掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
      掃一掃打開(kāi)百恒網(wǎng)絡(luò)微信小程序

      百恒網(wǎng)絡(luò)

      南昌百恒網(wǎng)絡(luò)

      Android開(kāi)發(fā)之接收系統(tǒng)broadcast:重啟后喚醒

      百恒網(wǎng)絡(luò) 2017-07-01 5807

      在南昌APP開(kāi)發(fā)中,相信很多技術(shù)人員都知道PhotoGallery,PhotoGallery應(yīng)用的后臺(tái)定時(shí)器雖然可以正常工作,但還不夠完美。如果用戶重啟了設(shè)備,定時(shí)器就會(huì)失效。

      設(shè)備重啟后,那些持續(xù)運(yùn)行的應(yīng)用通常也需要重啟。通過(guò)監(jiān)聽(tīng)?zhēng)в蠦OOT_COMPLETED操作的broadcast intent,可獲知設(shè)備是否已完成啟動(dòng)。只要打開(kāi)設(shè)備,系統(tǒng)就會(huì)發(fā)送一個(gè)BOOT_COMPLETEDbroadcast intent。要想監(jiān)聽(tīng)它,可以創(chuàng)建并登記一個(gè)standalone broadcast receiver。

      standalone receiver是一個(gè)在manifest配置文件中聲明的broadcast receiver。即便應(yīng)用進(jìn)程已消亡,standalone receiver也可以被激活。(稍后還會(huì)學(xué)習(xí)到可以同fragment或activity的生命周期綁定的dynamic receiver。)

      與服務(wù)和activity一樣,broadcast receiver必須在系統(tǒng)中登記后才能發(fā)揮作用。如果不登記,系統(tǒng)就不知道該向哪里發(fā)送intent。自然,broadcast receiver的onReceive(...)方法也就得不到預(yù)定的調(diào)用了。

      要登記broadcast receiver,首先要?jiǎng)?chuàng)建它。創(chuàng)建一個(gè)StartupReceiver新類,繼承android.content.BroadcastReceiver類,代碼如下所示。

      第一個(gè)broadcast receiver(StartupReceiver.java)

      public class StartupReceiver extends BroadcastReceiver{

      private static final String TAG = "StartupReceiver";

      @Override

      public void onReceive(Context context, Intent intent) {

      Log.i(TAG, "Received broadcast intent: " + intent.getAction());

      }

      }

      與服務(wù)和activity一樣,broadcast receiver是接收intent的組件。當(dāng)有intent發(fā)送給StartupReceiver時(shí),它的onReceive(...)方法會(huì)被調(diào)用。打開(kāi) AndroidManifest.xml配置文件,參照如下代碼登記上StartupReceiver。

      在manifest文件中添加receiver(AndroidManifest.xml)

      在manifest文件中添加receiver(AndroidManifest.xml)

      登記響應(yīng)隱式intent的standalone receiver和登記服務(wù)或activity差不多。我們使用receiver標(biāo)簽并在其中包含相應(yīng)的intent-filter。StartupReceiver會(huì)監(jiān)聽(tīng)BOOT_COMPLETED操作,而該操作也需要配置使用權(quán)限。因此,還需要添加一個(gè)相應(yīng)的uses-permission標(biāo)簽。

      在配置文件中完成聲明后,即使應(yīng)用并未運(yùn)行,只要有匹配的broadcast intent發(fā)來(lái),broadcast receiver就會(huì)醒來(lái)接收。一收到intent,broadcast receiver的onReceive(Context, Intent)方法即開(kāi)始運(yùn)行,隨后會(huì)被銷毀(如下圖所示)。

      接收BOOT_COMPLETED

      設(shè)備重啟后,StartupReceiver的onReceive(...)方法會(huì)被調(diào)用嗎?現(xiàn)在就來(lái)驗(yàn)證。首先,運(yùn)行更新版PhotoGallery應(yīng)用。

      然后,關(guān)閉設(shè)備。如果是物理設(shè)備,直接按電源鍵關(guān)機(jī)。如果是模擬器,最簡(jiǎn)單的方法是直接退出模擬器應(yīng)用。

      打開(kāi)設(shè)備。如果是物理設(shè)備,直接按電源鍵開(kāi)機(jī)。如果是模擬器,要么重新運(yùn)行應(yīng)用,要么使用AVD Manager啟動(dòng)應(yīng)用,但要保證使用的是剛關(guān)掉的那個(gè)模擬器。

      現(xiàn)在,選擇Tools → Android → Android Device Monitor菜單項(xiàng)打開(kāi)Android Device Monitor。(KitKat之前,Android Device Monitor常被稱為Dalvik Debug Monitor Server或DDMS。Dalvik是Android上的運(yùn)行時(shí)系統(tǒng)。自KitKat開(kāi)始,Google又引入了ART(Android Runtime)。到了Lollipop,就只剩下ART可用了。雖然現(xiàn)在已改名為Android Device Monitor,但舊的名字仍時(shí)有耳聞。)

      點(diǎn)擊Android Device Monitor的Devices選項(xiàng)頁(yè)中的設(shè)備。(如果看不到設(shè)備列表,請(qǐng)嘗試插拔USB設(shè)備或重啟模擬器。)

      在Android Device Monitor窗口中,以Received broadcast intent關(guān)鍵字搜索LogCat輸出(如下圖所示)。

      搜索LogCat輸出

      可以在LogCat中看到表明receiver運(yùn)行的日志。但如果在設(shè)備標(biāo)簽頁(yè)查看設(shè)備,則可能看不到任何PhotoGallery進(jìn)程。這是因?yàn)檫M(jìn)程在運(yùn)行broadcast receiver之后,就隨即消亡了。

      (使用Logcat輸出測(cè)試receiver的運(yùn)行不一定總是成功,尤其是在模擬器上。按照上述步驟操作,如果看不到log日志,南昌APP開(kāi)發(fā)公司-百恒網(wǎng)絡(luò)建議大家多試幾次。還是不行的話,那就暫時(shí)放棄,等學(xué)習(xí)到優(yōu)化通知消息時(shí),就能以其他更方便的辦法來(lái)驗(yàn)證receiver的運(yùn)行了。)


      400-680-9298,0791-88117053
      掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
      掃一掃打開(kāi)百恒網(wǎng)絡(luò)小程序

      歡迎您的光顧,我們將竭誠(chéng)為您服務(wù)×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務(wù) 售后服務(wù)
       
      售后服務(wù) 售后服務(wù)
       
      備案專線 備案專線
       
      ×
      国产日韩精品SUV| 中文字幕日韩高清| 精品人妻人人做人人爽| 久久国产成人精品麻豆| 精品久久久久久99人妻| 成人国产精品999视频| 日韩AV无码不卡网站| 国内精品久久久久影视| 无码人妻精品一区二区三区9厂 | 香蕉视频国产精品| 5x社区精品视频在线播放18| 亚洲AV无码成人精品区蜜桃| 国产乱人伦偷精品视频AAA | 麻豆国产精品有码在线观看| 久久精品亚洲一区二区三区浴池| 久久只有这里的精品69| 日本精品在线视频| 一本久久a久久精品亚洲| 国产在线国偷精品免费看| 久久久精品久久久久久| 国产精品片在线观看手机版| 岛国精品在线观看| 日韩丰满少妇无码内射| 中文字幕久久精品| 九九热线精品视频16| 91精品国产免费久久久久久青草 | 91精品免费不卡在线观看| 亚洲午夜精品一区二区| 久久96精品国产| 久久久久久久久毛片精品| 久久精品韩国三级| 久久精品免费视频观看| 人人妻人人澡人人爽精品日本| 久久久精品中文字幕麻豆发布| 老司机精品视频在线观看| 精品一区二区三区免费毛片| 国产午夜亚洲精品不卡免下载| 国产成人精品亚洲一区| 日韩在线观看网站| 日韩av人人夜夜澡人人爽| 精品少妇人妻av无码专区 |