編輯:關於Android編程
本節學習系統中特殊的廣播接收者。
我們前面幾節不是說了,當廣播接受者一旦注冊到系統中,當系統發送的廣播和你注冊的廣播的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; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public 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, 廣播接受者已注冊); } @Override public void onDestroy() { // 銷毀廣播接收者 super.onDestroy(); unregisterReceiver(sReceiver); Log.i(ScreenService, 廣播接受者已銷毀); } }在Service的onCreate方法中注冊廣播接收者,在Destory方法中銷毀廣播接收者
最終廣播接收者的代碼:
public class ScreenReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String 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。 就到這裡,大家了解下就行
使用自定義Animation,實現View的左右搖擺效果,如圖所示:代碼很簡單,直接上源碼activity_maini.xml布局文件:<?xml vers
Android特效專輯(九)——仿微信雷達搜索好友特效,邏輯清晰實現簡單 不知不覺這個春節也已經過完了,遺憾家裡沒網,沒能及時給大家送上祝福,今天
“點九”圖片概述 “點九”是andriod平台的應用軟件開發裡的一種特殊的圖片形式,文件擴展名為:.9.png。 我們都知道android平台有多種不同的分辨
微信中刪除的聊天記錄如何找回?相信大家都有過誤刪了重要的微信聊天記錄而在那裡拼命懊悔的經歷,那都是因為沒有找到一個很好的解決方法。其實在科技如此發達的今天,