Android 四大組件之一
廣播的註冊方式有兩種:
一種是動態註冊 Context.registerReceiver() ,即在java代碼中註冊.
一種是靜態註冊,即在 AndroidManifest.xml 中使用<receiver>標籤註冊。
一、動態註冊:
private static String ACTION_TEST = "com.hsj.broad.test";
private static String ACTION_DATA = "com.hsj.broad.data";
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_TEST);
filter.addAction(ACTION_DATA);
registerReceiver(receiver, filter);
二、靜態註冊:
<receiver android:name="com.hsj.receiver.XmlBroadcastReceiver" >
<intent-filter>
<action android:name="com.hsj.broad.xml" />
</intent-filter>
</receiver>
三、測試代碼:
package com.hsj.broadcast.activity;
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.Toast;
import com.hsj.broadcast.R;
/**
* 廣播例子
*/
public class MainActivity extends Activity implements OnClickListener {
private static String TAG = MainActivity.class.getSimpleName();
private static String ACTION_TEST = "com.hsj.broad.test";
private static String ACTION_DATA = "com.hsj.broda.data";
private Button btnRegister;
private Button btnSendBroad;
private Button btnSendData;
private Button btnUnRegister;
private Button btnSendXml;
private TestBroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initView() {
btnRegister = (Button) findViewById(R.id.btn_register);
btnSendBroad = (Button) findViewById(R.id.btn_sendBroad);
btnSendData = (Button) findViewById(R.id.btn_sendData);
btnUnRegister = (Button) findViewById(R.id.btn_unregister);
btnSendXml = (Button) findViewById(R.id.btn_sendXml);
btnRegister.setOnClickListener(this);
btnSendBroad.setOnClickListener(this);
btnSendData.setOnClickListener(this);
btnUnRegister.setOnClickListener(this);
btnSendXml.setOnClickListener(this);
}
private void initData() {
receiver = new TestBroadcastReceiver();
}
/** 註冊廣播 */
private void registerAction() {
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_TEST);
filter.addAction(ACTION_DATA);
registerReceiver(receiver, filter);
Toast.makeText(MainActivity.this, "註冊廣播成功", Toast.LENGTH_SHORT).show();
}
/** 註銷廣播 */
private void unRegisterBroad() {
unregisterReceiver(receiver);
Toast.makeText(MainActivity.this, "註銷廣播成功", Toast.LENGTH_SHORT).show();
}
/** 發送廣播 */
private void sendBroadCast() {
Intent intent = new Intent();
intent.setAction(ACTION_TEST);
sendBroadcast(intent);
}
/** 發送帶數據的廣播 */
private void sendBroadData() {
Intent intent = new Intent();
intent.setAction(ACTION_DATA);
intent.putExtra("data", "我是發廣播送的");
sendBroadcast(intent);
}
/** 發送xml註冊的廣播 */
private void sendBroadXml() {
Intent intent = new Intent();
intent.setAction("com.hsj.broad.xml");
sendBroadcast(intent);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_register:
registerAction();
break;
case R.id.btn_sendBroad:
sendBroadCast();
break;
case R.id.btn_sendData:
sendBroadData();
break;
case R.id.btn_unregister:
unRegisterBroad();
break;
case R.id.btn_sendXml:
sendBroadXml();
break;
default:
break;
}
}
/**
* 測試的廣播接收者
*/
class TestBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_TEST.equals(intent.getAction())) {
Toast.makeText(MainActivity.this, "哈哈,我收到了...",
Toast.LENGTH_SHORT).show();
}
if (ACTION_DATA.equals(intent.getAction())) {
String data = intent.getStringExtra("data");
Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT)
.show();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
<span style="white-space:pre"> </span>//註銷廣播
unregisterReceiver(receiver);
}
}