文章出處
文章列表
注冊
靜態注冊
新建一個Java類,繼承于android.content.BroadcastReceiver,并實現他的onReceiver()方法,下面就是一個名為MBroadcast的廣播接收者:
public class MyBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,intent.getStringExtra("msg"),Toast.LENGTH_SHORT).show(); } }
<receiver android:name=".MyBroadcast"> <intent-filter> <action android:name="android.intent.action.MY_BROADCAST"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </receiver>
動態注冊
public class MainActivity extends Activity {
private MyBroadcast myBroadcast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myBroadcast = new MyBroadcast();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MY_BROADCAST");
registerReceiver(myBroadcast,filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myBroadcast);
}
}
發送廣播:
Intent intent = new Intent("android.intent.action.MY_BROADCAST");
intent.putExtra("msg","hello receiver");
sendBroadcast(intent);
當收到廣播之后,廣播接收者就會執行onReveiver()方法;
廣播的種類
普通廣播(Normal Broadcast)
- 普通廣播對于多個接收者來說,完全是異步的,通常每個對象都無需等待即可接受到廣播,接收者直接相互不會有影響,接收者無法終止廣播
有序廣播
我們重點說說有序廣播,有序廣播是按一定的優先級順序發送的(根據android:priority,最大值是int的最大值),廣播一層一層的往下發送,中間可以停在向下發送(abortBroadcast(); ),下面我們創建三個廣播接收者:
public class FirstBroad extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,intent.getStringExtra("msg")+1,Toast.LENGTH_SHORT).show(); setResultData("我已經被接受過一次了"); } }
public class SecondBroad extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,getResultData()+intent.getStringExtra("msg")+2,Toast.LENGTH_SHORT).show(); setResultData("我已經被接受過二次了"); //abortBroadcast(); } }
public class ThirdBroad extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,getResultData()+intent.getStringExtra("msg")+3,Toast.LENGTH_SHORT).show(); } }
注冊有序廣播:
<receiver android:name=".FirstBroad"> <intent-filter android:priority="1000"> <action android:name="android.coderwei.orderbroadcast"/> </intent-filter> </receiver> <receiver android:name=".SecondBroad"> <intent-filter android:priority="800"> <action android:name="android.coderwei.orderbroadcast"/> </intent-filter> </receiver> <receiver android:name=".ThirdBroad"> <intent-filter android:priority="500"> <action android:name="android.coderwei.orderbroadcast"/> </intent-filter> </receiver>
發送有序廣播:
Intent intent = new Intent("android.coderwei.orderbroadcast"); intent.putExtra("msg","hello receiver"); sendOrderedBroadcast(intent,null);
其中setResultData可以向下一個廣播接收者發送數據。
sendOrderedBroadcast(intent,null);中的第二個參數為null的時候,不需要接收者聲明指定的權限,不為null則需要聲明指定的權限,在AndroidManifest.xml中定義一個權限:<permission android:name="permission.MY_BROADCAST_PERMISSION" />
然后使用這個權限:
<uses-permission android:name="permission.MY_BROADCAST_PERMISSION" />
然后null改成"permission.MY_BROADCAST_PERMISSION"
文章列表
全站熱搜