android四大組件之BroadcastReceiver
BroadcastReceiver介紹
BroadcastReceiver用於接收程式(包括使用者開發的程式和系統內部的程式)所發出的Broadcast Intent
用法
程式啟動BroadcastReceiver只需要兩步
1 建立需要啟動的BroadcastReceiver的Intent
2 調用Context的sendBroadcast()或sendOrderedBroadcast()方法來啟動指定的BroadcastReceiver
private void sendBroadcast() { Intent intent = new Intent(); //設定頻道com.receiver.test intent.setAction(com.receiver.test); intent.putExtra(msg, 簡單的訊息); sendBroadcast(intent); }
程式接收Broadcast使用BroadcastReceiver
BroadcastReceiver本質上是一個系統級的監聽器,擁有自己的進程,只要有與之匹配的Intent就要被廣播出來。只要重寫BroadcastReceiver的onReceive()方法就可以,並同時指定能匹配的Intent 有兩種方法指定匹配的intent;
注意:每次系統Broadcast事件發生後,系統執行完onReceive()方法後,BroadcastReceiver執行個體就要被銷毀,所以要 @Override protected void onDestroy() 方法 (1)AndroidManifest.xml檔案中
(2)java代碼中
private MyReceiver myReceiver; //代碼中設定頻道,最後要解除綁定 myReceiver=new MyReceiver(); IntentFilter filter=new IntentFilter(com.receiver.test); registerReceiver(myReceiver,filter); @Override protected void onDestroy() { super.onDestroy(); //解除綁定 unregisterReceiver(myReceiver); }
當應用程式發出一個Broadcast Intent之後,所有匹配改Intent的BroadcastReceiver都有可能被啟動,下面程式用於接收廣播,收到後使用Toast提示資訊
public class MyReceiver extends BroadcastReceiver { //用於接收廣播收到後使用Toast提示 @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,收到訊息,Toast.LENGTH_LONG).show(); }}
效果示範如下
下面利用BroadcastReceiver實現鬧鐘功能
private AlarmManager mAlarmManager; mAlarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE); private void startAlarm() { Intent intent2 = new Intent(); //設定頻道 intent2.setAction(com.receiver.test); //0x23為隨便設定的標誌 PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0x23,intent2,PendingIntent.FLAG_UPDATE_CURRENT); mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,3000,pendingIntent); } private void cancelAlarm() { Intent intent2 = new Intent(); //設定頻道 intent2.setAction(com.receiver.test); PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0x23,intent2,PendingIntent.FLAG_UPDATE_CURRENT); //五秒後啟動鬧鐘, 三秒後再次啟動鬧鐘 mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,3000,pendingIntent); mAlarmManager.cancel(pendingIntent); }
效果如下
使用系統廣播
下面兩個一個監聽網路狀態另一個當程式被卸載時廣播