廣播是android四大組件之一,很多情況下數據的傳遞是用過Intent發送, 跳到另外一個Activity就可以接收數據然後更新UI了,但是如果不是跳到另外一個Activity的情況下數據是怎麼傳遞的呢?就需要使用BroadcastReceiver
下面我使用動態註冊的方式來註冊廣播傳遞數據。
先寫一個廣播接收器類需要繼承BroadcastReceiver
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MyBroadcastReceiver extends BroadcastReceiver{
//onReceive可以接收發送出去的廣播數據。
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
Log.e("onReceive", arg1.getStringExtra("data"));
}
}
//下一個Activity類來註冊和發送廣播
import android.app.Activity;
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;
public class SendBroadcastActivity extends Activity{
private Button registbtn;
private Button sendbtn;
private MyBroadcastReceiver bcr;//上面寫的一個廣播接收類
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registbtn = (Button) findViewById(R.id.test);
sendbtn = (Button) findViewById(R.id.test3);
registbtn.setText("註冊廣播");
sendbtn.setText("發送廣播");
//動態註冊光廣播
registbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
bcr = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("myAction");
SendBroadcastActivity.this.registerReceiver(bcr, filter);
}
});
//開始發送廣播
sendbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(bcr!=null){
Intent intent = new Intent();intent.setAction("myAction");
intent.putExtra("data", "Hi!I am broadcastData!");
SendBroadcastActivity.this.sendBroadcast(intent);
}
else{
Toast.makeText(SendBroadcastActivity.this, "請先註冊廣播", Toast.LENGTH_LONG).show();
}
});
}
}