天天看點

Android入門:廣播發送者與廣播接收者

Android入門:廣播發送者與廣播接收者

一、廣播發送者&廣播接收者介紹

1.廣播接收者

廣播接收者簡單地說就是接收廣播意圖的Java類,此Java類繼承BroadcastReceiver類,重寫:

public void onReceive(Context context,Intent intent),其中intent可以獲得傳遞的資料;

廣播意圖就是通過Context.sendBroadcast(Intent intent)或Context.sendOrderedBroadcast(Intent intent)發送的意圖,通過這個語句,能夠廣播給所有滿足條件的元件,比如intent設定了action="com.xiazdong",則所有在AndroidManifest.xml中設定過<action android:name="com.xiazdong"/>的廣播接收者都能夠接收到廣播;

2.廣播發送者

通常廣播發送方就是調用Context.sendBroadcast()的程式,而廣播接收者就是繼承BroadcastReceiver的程式;

通常廣播發送方都是通過隐式意圖,這樣才能發送給多人;

廣播發送方分為普通廣播和有序廣播;

同步廣播:發送方發出後,幾乎同時到達多個廣播接收者處,某個接收者不能接收到廣播後進行一番處理後傳給下一個接收者,并且無法終止廣播繼續傳播;Context.sendBroadcast(intent);

有序廣播:廣播接收者需要提前設定優先級,優先級高的先接收到廣播,優先級數值為-1000~1000,在AndroidManifest.xml的<intent-filter android:priority="xxx">設定;比如存在3個廣播接收者A、B、C,優先級A>B>C,是以A最先收到廣播,當A收到廣播後,可以向廣播中添加一些資料給下一個接收者(intent.putExtra()),或者終止廣播(abortBroadcast());Context.sendOrderedBroadcast(intent);

二、廣播接收者核心代碼

同步廣播發送方核心代碼:

1

Intent intent = 

new

Intent();

2

intent.setAction(

"..."

);

3

Context.sendBroadcast(intent);

有序廣播發送方核心代碼:

Intent intent = new Intent();
intent.setAction("...");
Context.sendOrderedBroadcast(intent,null);
           

廣播接收者核心代碼:

1

public

class

Receiver 

extends

BroadcastReceiver{

2

public

void

onReceive(Context context, Intent intent) {

3

Bundle bundle = intent.getExtras();

4

...

5

}

6

}

AndroidManifest.xml

<application>         
	<receiver android:name=".Receiver"> 
		<intent-filter android:priority="1000"> 
			<action android:name="com.xiazdong"/>
		</intent-filter>
	</receiver>
</application>		
           

三、廣播執行個體

1.同步廣播執行個體

場景說明:

Android入門:廣播發送者與廣播接收者

(1)廣播發送者:

01

package

com.xiazdong.broadcastsender;

02

03

import

android.app.Activity;

04

import

android.content.Intent;

05

import

android.os.Bundle;

06

import

android.view.View;

07

import

android.view.View.OnClickListener;

08

import

android.widget.Button;

09

import

android.widget.Toast;

10

11

public

class

MainActivity 

extends

Activity {

12

private

Button button;

13

private

OnClickListener listener = 

new

OnClickListener(){

14

@Override

15

public

void

onClick(View v) {

16

Intent intent = 

new

Intent();

17

intent.setAction(

"com.xiazdong"

);

18

intent.putExtra(

"name"

"xiazdong"

);

19

MainActivity.

this

.sendBroadcast(intent);

20

Toast.makeText(getApplicationContext(), 

"發送廣播成功"

, Toast.LENGTH_SHORT).show();

21

}

22

};

23

@Override

24

public

void

onCreate(Bundle savedInstanceState) {

25

super

.onCreate(savedInstanceState);

26

setContentView(R.layout.main);

27

button = (Button)

this

.findViewById(R.id.button);

28

button.setOnClickListener(listener);

29

}

30

}

(2)廣播接收者

01

package

com.xiazdong.broadcastreceiver1;

02

03

import

android.content.BroadcastReceiver;

04

import

android.content.Context;

05

import

android.content.Intent;

06

import

android.util.Log;

07

08

public

class

Receiver 

extends

BroadcastReceiver {

09

10

@Override

11

public

void

onReceive(Context context, Intent intent) {

12

String name = intent.getExtras().getString(

"name"

);

13

Log.i(

"Recevier1"

"接收到:"

+name);

14

}

15

16

}

AndroidManifest.xml

1

<receiver android:name=

".Receiver"

>

2

<intent-filter>

3

<action android:name=

"com.xiazdong"

/>

4

</intent-filter>

5

</receiver>

結果:

Android入門:廣播發送者與廣播接收者

2.有序廣播執行個體

場景說明:

Android入門:廣播發送者與廣播接收者

(1)廣播發送者

01

package

com.xiazdong.broadcastsender;

02

03

import

android.app.Activity;

04

import

android.content.Intent;

05

import

android.os.Bundle;

06

import

android.view.View;

07

import

android.view.View.OnClickListener;

08

import

android.widget.Button;

09

import

android.widget.Toast;

10

11

public

class

MainActivity 

extends

Activity {

12

private

Button button;

13

private

OnClickListener listener = 

new

OnClickListener(){

14

@Override

15

public

void

onClick(View v) {

16

Intent intent = 

new

Intent();

17

intent.setAction(

"com.xiazdong"

);

18

intent.putExtra(

"name"

"xiazdong"

);

19

MainActivity.

this

.sendOrderedBroadcast(intent, 

null

);   

//有序廣播發送

20

Toast.makeText(getApplicationContext(), 

"發送廣播成功"

, Toast.LENGTH_SHORT).show();

21

}

22

};

23

@Override

24

public

void

onCreate(Bundle savedInstanceState) {

25

super

.onCreate(savedInstanceState);

26

setContentView(R.layout.main);

27

button = (Button)

this

.findViewById(R.id.button);

28

button.setOnClickListener(listener);

29

}

30

}

(2)廣播接收者

Receiver1

檢視源碼 列印 ?

01

package

com.xiazdong.broadcastreceiver1;

02

03

import

android.content.BroadcastReceiver;

04

import

android.content.Context;

05

import

android.content.Intent;

06

import

android.util.Log;

07

08

public

class

Receiver 

extends

BroadcastReceiver {

09

10

@Override

11

public

void

onReceive(Context context, Intent intent) {

12

String name = intent.getExtras().getString(

"name"

);

13

Log.i(

"Recevier1"

"接收到:"

+name);

14

abortBroadcast();   

//Receiver1接收到廣播後中斷廣播

15

}

16

17

}

AndroidManifest.xml

<receiver android:name=".Receiver">
      <intent-filter android:priority="1000">	<!-- 設定最高優先級 -->
         <action android:name="com.xiazdong"/>
      </intent-filter>
 </receiver>
           

繼續閱讀