標籤:
1:分類:
標準廣播:沒有先後順序,無法被截斷
有序廣播:又先後順序,可以截斷
2:接收廣播:首先進行註冊,註冊的方式有靜態註冊和動態註冊。也就是在代碼中註冊和在AndroidManifest中註冊,並且一旦涉及到系統方面的關鍵性資訊無論靜態還是動態都要在manifest中聲明許可權:
<users-permission andorid:name="android.permission.ACCESS_NETWORK_STATE"/>查詢網路狀態
<users-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>接受系統廣播
<uers-permisson android:Name="android.permisson.SYSTEM_ALERT_WINDOW"/>彈出系統層級的對話方塊
<user-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><receiver android:name=".BootCmpleteReceiver"> <intent-filter> <action android:name="android:intent.action.BOOT_COMPLETED"/></intent-filter></recerver>
發送標準廣播
public calss MyBroadcastReceiver extends BroadcastReceiver{ @override public void onReceive(Context context,Intent intent){ Toast.makeText(context,"*****",Toast.LENGTH_SHORT).show(); }}<manifest xmlns:andorid=........><application.....><receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action andrid:name="com.example.broadcasttest.MYBROADCAST"/></receiver></application></manifest>MainActivity: Button button=(Button)findViewById(R.id。send); burron.setOnClickListener(new OnClickListener(){ @override public void onClick(View v){ Intent inten =new Intent("加入註冊時約好的訊號"); sendBroadcast(intent);//sendOrderBroadcast(intent,null)發送有序廣播 }});
發送有序廣播:
需要在聲明檔案中加入<intent-filter android:priority="**">優先順序表示語句
如果不希望繼續傳播那就在廣播事件中加入 :abortBroadcast();
3:本地廣播的使用
public class MainActivity extens Activity{ private IntentFilter intentFilter; private LocalBroadcastManager LocalBroadcastManager; private LocalReceiver localReceiver; @Override public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout...);Button button=(Button) findViewById(R.id.send);localBroadcastManager= LocalBroadcastManager.gerInstance(this);//擷取執行個體 button.setOnClickLister(new OnClickListener(){@overridepublic void onClick(View v){Intent intent=new Intent(""com.example.broadcast.MYBROADCAST);localBroadcastManager. sendBroadcast(intent);} }); intentFilter=new IntentFilter(); localReceiver=new LocalReceiver(); intentFilter.addAction("com.example.broadcast.MYBROADCAST"); localBroadcastManager.registerReceiver(localReceiver,intentFilter); } @Override protected void onDestroy(){ super.onDestroy(); localBroadcastManager.unregisterReceiver(localReceiver); } @Override class LocalReceiver(){public void onReceive(){ ......} }
本地廣播為了安全性無法通過靜態註冊,一般靜態註冊實在實現開機啟動的時候才會使用就是說程式還沒開啟就會先收到廣播。
注意:在廣播接收器裡面啟動活動的話一定要使用intent.addFlags(Intenten.FLAG_ACTIVITY_TASK)
還有如果只是調用類的靜態方法的話 那麼不用執行個體化也可以的,靜態方法不是屬於累對象的,是屬於類的。
android(eclipse)廣播機制知識梳理(三)