Android 四大組件學習之BroadcastReceiver四

來源:互聯網
上載者:User

Android 四大組件學習之BroadcastReceiver四

本節學習系統中特殊的廣播接收者。

我們前面幾節不是說了,當廣播接受者一旦註冊到系統中,當系統發送的廣播和你註冊的廣播的action匹配時,系統就會啟動廣播接收者所在的進程。除非使用者手動停止廣播接收者所在的進程。但是生活中有這樣一種情況,比如說:我在玩網路遊戲,假設說遊戲本身在系統電量低的情況下,會自動儲存當前遊戲的進度,也就是存檔的。可以這麼說,此廣播接受者只有在使用者玩遊戲時才需要啟動,別的時候使用者是不需要的。如果此廣播接收者一直常駐於系統,那不是很浪費系統資源。所以我們就需要動態啟動廣播接收者,和停止廣播接收者。可是大家知道,廣播接收者只要在資訊清單檔中註冊過了的,就會永遠啟動的。所以唯一的辦法就是不在資訊清單檔中註冊,在代碼中動態註冊。

 

說了這麼多,就是說可以用代碼動態註冊廣播接收者。

說到在代碼中註冊廣播接收者,那Android系統中規定,螢幕鎖屏和解鎖,以及電量改變必須用代碼註冊,在資訊清單檔中註冊是不起作用的。那是因為,螢幕鎖屏和解鎖,以及電量改變事件太頻繁發生了。如果在資訊清單檔中註冊,將會對系統消耗很大。

 

那我們就用螢幕解鎖和鎖屏實現代碼中註冊廣播接收者

這次我們用服務去建立廣播接收者

Activity的代碼:也就是兩個按鈕,一個用於建立建立服務,一個用於停止服務

 

public class MainActivity extends Activity {Intent intent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        intent = new Intent(this, ScreenService.class);    }        //啟動服務    public void openScreen(View v)    {    Log.i(MainActivity, 啟動廣播接收者服務);    startService(intent);    }        //關閉服務    public void closeScreen(View v)    {    Log.i(MainActivity, 關閉廣播接收者服務);    stopService(intent);    }}
然後Service的代碼:

 

 

public class ScreenService extends Service {private ScreenReceiver sReceiver;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// 註冊廣播接收者super.onCreate();//建立一個廣播接收者sReceiver = new ScreenReceiver();//指定接收那種類型的廣播IntentFilter filter = new IntentFilter();//指定關螢幕和開螢幕filter.addAction(Intent.ACTION_SCREEN_OFF);filter.addAction(Intent.ACTION_SCREEN_ON);//註冊廣播接收者registerReceiver(sReceiver, filter);Log.i(ScreenService, 廣播接受者登入);}@Overridepublic void onDestroy() {// 銷毀廣播接收者super.onDestroy();unregisterReceiver(sReceiver);Log.i(ScreenService, 廣播接受者已銷毀);}}
在Service的onCreate方法中註冊廣播接收者,在Destory方法中銷毀廣播接收者

 

最終廣播接收者的代碼:

public class ScreenReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if(Intent.ACTION_SCREEN_OFF.equals(action)){//接收到管螢幕的廣播Log.i(ScreenReceiver, 螢幕關閉!);}else if(Intent.ACTION_SCREEN_ON.equals(action)){//接收到開螢幕的廣播Log.i(ScreenReceiver, 螢幕開啟!);}}}

資訊清單檔中,需要要佈建服務,廣播接收者不需要配置

 

 

                                                                                        
運行效果如下:

 

 

ok。 就到這裡,大家瞭解下就行

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.