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

jopen 12年前發布 | 142K 次閱讀 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);



二、廣播接收者核心代碼


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


Intent intent = new Intent();
intent.setAction("...");
Context.sendBroadcast(intent);


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

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


廣播接收者核心代碼:


public class Receiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        ...
    }
}

AndroidManifest.xml

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


 

三、廣播實例

 

 

1.同步廣播實例

 

 

場景說明:


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

 

(1)廣播發送者:

 

package com.xiazdong.broadcastsender;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    private Button button;
    private OnClickListener listener = new OnClickListener(){
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setAction("com.xiazdong");
            intent.putExtra("name", "xiazdong");
            MainActivity.this.sendBroadcast(intent);
            Toast.makeText(getApplicationContext(), "發送廣播成功", Toast.LENGTH_SHORT).show();
        }
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(listener);
    }
}


(2)廣播接收者

 

package com.xiazdong.broadcastreceiver1;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class Receiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String name = intent.getExtras().getString("name");
        Log.i("Recevier1", "接收到:"+name);
    }

}


AndroidManifest.xml

 

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


結果:

 

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

 

 

2.有序廣播實例

 

 

場景說明:

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

 

(1)廣播發送者

 

package com.xiazdong.broadcastsender;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    private Button button;
    private OnClickListener listener = new OnClickListener(){
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setAction("com.xiazdong");
            intent.putExtra("name", "xiazdong");
            MainActivity.this.sendOrderedBroadcast(intent, null);   //有序廣播發送
            Toast.makeText(getApplicationContext(), "發送廣播成功", Toast.LENGTH_SHORT).show();
        }
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(listener);
    }
}


(2)廣播接收者


Receiver1

package com.xiazdong.broadcastreceiver1;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class Receiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String name = intent.getExtras().getString("name");
        Log.i("Recevier1", "接收到:"+name);
        abortBroadcast();   //Receiver1接收到廣播后中斷廣播
    }

}


AndroidManifest.xml

 

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


 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!