1.廣播接收者(BroadcastReceiver)
廣播接收者(BroadcastReceiver)繼承BroadcastReceiver類接收廣播意圖的Java類,重寫:
public void onReceive(Context context,Intent intent),其中intent可以獲得傳遞的數據;
廣播意圖就是通過Context.sendBroadcast(Intent intent)或Context.sendOrderedBroadcast(Intentintent)發送的意圖,通過這個語句,能夠廣播給所有滿足條件的組件,比如intent設置了action="Receiver",則所有在AndroidManifest.xml中設置過<actionandroid:name="Receiver"/>的廣播接收者都能夠接收到廣播;
2.廣播發送者sendBroadcast()
通常廣播發送方就是調用Context.sendBroadcast()的程序,通常廣播發送方都是通過隱式意圖發送出去;
廣播發送方分為普通廣播和有序廣播;
同步廣播:發送方發出後,幾乎同時到達多個廣播接收者處,某個接收者不能接收到廣播後進行壹番處理後傳給下壹個接收者,並且無法終止廣播繼續傳播;Context.sendBroadcast(intent);
有序廣播:廣播接收者需要提前設置優先級,優先級高的先接收到廣播,優先級數值為-1000~1000,在AndroidManifest.xml的<intent-filterandroid:priority="1">設置;比如存在3個廣播接收者A、B、C、D,優先級A>B>C>D,因此A最先收到廣播,當A收到廣播後,可以向廣播中添加壹些數據給下壹個接收者(intent.putExtra()),或者終止廣播 abortBroadcast();Context.sendOrderedBroadcast(intent);
壹、同步廣播發送方核心代碼
Intent intent = new Intent();
intent.setAction("Receiver");
Context.sendBroadcast(intent);
有序廣播發送方核心代碼:
Intent intent = new Intent();
intent.setAction("Receiver");
Context.sendOrderedBroadcast(intent,null);
二、廣播接收者核心代碼:
public class MyReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();...
}
}
三 註冊該廣播
AndroidManifest.xml 註冊方式
<receiver android:name=".MyReceiver">
<intent-filter android:priority="1000">
<action android:name="Receiver"/>
</intent-filter>
</receiver>
Java類註冊方式
publicvoid registerBoradcastReceiver()
{
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction("Receiver");
registerReceiver(廣播類對象, myIntentFilter);
}
簡單例子
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class Test extends Activity{
private final String ACTION_NAME = "Receiver";
private Button mBtnEvent = null;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//註冊廣播
registerBoradcastReceiver();
LinearLayout mLinearLayout = new LinearLayout(this);
mBtnEvent= new Button(this);
mBtnEvent.setText("發送廣播");
mLinearLayout.addView(mBtnMsgEvent);
setContentView(mLinearLayout);
mBtnEvent.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sendTestBroadcast();
}
});
}
//發送廣播
private void sendTestBroadcast()
{
Intent mIntent = new Intent(ACTION_NAME);
mIntent.putExtra("strData", "發送廣播,在這裏傳送數據");
sendBroadcast(mIntent);
}
private BroadcastReceiver myReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals(ACTION_NAME)){
Toast.makeText(Test.this, "接收測試", 200);
}
}
};
//註冊廣播
public void registerBoradcastReceiver(){
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction(ACTION_NAME);
registerReceiver(myReceiver, myIntentFilter);
}
}