Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 四大組件學習之BroadcastReceiver四

Android 四大組件學習之BroadcastReceiver四

編輯:關於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。 就到這裡,大家了解下就行

 

 

 

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved