1. 程式人生 > >Android之廣播機制—本地廣播

Android之廣播機制—本地廣播

本地廣播:
只在程式內部進行傳遞的廣播,傳送和接收都只在本程式有效。

示例程式碼:

public class MainActivity extends AppCompatActivity {
    private IntentFilter intentFilter;
    private LocalReceiver localReceiver;
    //本地廣播資料型別例項。
    private LocalBroadcastManager localBroadcastManager;


    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

	//獲取本地廣播例項。
        localBroadcastManager=LocalBroadcastManager.getInstance(this);

        Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent("com.example.tangyi.receiver5.LOCAL_BROADCAST");
		//傳送本地廣播。
                localBroadcastManager.sendBroadcast(intent);
            }
        });
	//新建intentFilter並給其action標籤賦值。
        intentFilter=new IntentFilter();
        intentFilter.addAction("com.example.tangyi.receiver5.LOCAL_BROADCAST");
	
	//建立廣播接收器例項,並註冊。將其接收器與action標籤進行繫結。
        localReceiver=new LocalReceiver();
        localBroadcastManager.registerReceiver(localReceiver,intentFilter);
    }
    @Override
    public void onDestroy(){//在onDestroy()方法中取消註冊。
        super.onDestroy();
	//取消註冊呼叫的是unregisterReceiver()方法,並傳入接收器例項。
        localBroadcastManager.unregisterReceiver(localReceiver);
    }
    class  LocalReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context,Intent intent){
            Toast.makeText(context,"這是本地廣播接收器",Toast.LENGTH_SHORT).show();
        }
    }
}
本地廣播是無法通過靜態註冊來實現的。因為靜態註冊是為了讓程式未啟動也能接收廣播。本地廣播是在本程式內進行
傳遞,肯定是已經啟動了,因此也完全不需要靜態註冊。