Android學習筆記之廣播機制(1)

fmms 12年前發布 | 33K 次閱讀 Android Android開發 移動開發

廣播接收者(BroadcastReceiver)用于異步接收廣播Intent,廣播Intent的發送是通過調用Context.sendBroadcast()、Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()來實現的。通常一個廣播Intent可以被訂閱了此Intent的多個廣播接收者所接收。

廣播機制:

Android學習筆記之廣播機制(1)

要實現一個廣播接收者方法如下:


界面:

package mars.testbc;

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;

public class TestActivity extends Activity {
    /** Called when the activity is first created. */
    private Button sendButton;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testreceiver);
        sendButton = (Button)findViewById(R.id.sendButton);
        sendButton.setOnClickListener(new BroadcastListener());
    }
    class BroadcastListener implements OnClickListener{

        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_EDIT);
            TestActivity.this.sendBroadcast(intent);
        }

    }
}


第一步:要想實現一個廣播機制,就必須實現一個類,這個類繼承于BroadcastReceiver并重寫onReceive()方法。

package mars.testbc;

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

public class TestReceiver extends BroadcastReceiver{

    public TestReceiver(){
        System.out.println("TestReceiver");
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("onReceive");
    }
}

事件響應的實現應在onReceive方法中實現。

第二步:訂閱感興趣的廣播Intent,訂閱方法有兩種:
第一種:使用代碼進行訂閱
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);
第二種:在AndroidManifest.xml文件中的<application>節點里進行注冊:
<intent-filter>是一個過濾器。

在發送廣播過程中,如果某個BroadCastReceiver的Action和這里的Action相符合,則啟動,接受廣播。

<receiver android:name=".TestReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PICK" />
            </intent-filter>
        </receiver>


生命周期:

每次廣播到來時,會重新創建BroadcastReceiver對象,并且調用onReceive()方法,執行完以后,該對象即被銷毀.

當onReceive()方法在10秒內沒有執行完畢,Android會認為該程序無響應.所以在

BroadcastReceiver里不能做一些比較耗時的操作,否側會彈出ANR(Application No

Response)的對話框.。

 

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