Android系统引入了一种信息传播机制----广播机制,这是一种广泛应用在应用程序之间传输信息的机制。比如低于变换,电量不足,来电来短信等。BroadcastReceiver相当 于广播接收器,类似于收音机。都知道收音机获取广播需要依靠频率来匹配,这里的频率就是Intent对象中的action属性。
BroadcastReceiver用法比较简单,直接上代码。
交互界面BroadcastReceiverActivity.java
package com.android;
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
*
* 注释部分代码为内部类实现广播接收,
* 使用纯代码实现注册和注销广播接收
*
*/
public class BroadcastReceiverActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*IntentFilter ifi = new IntentFilter();
ifi.addAction("com.android.innerbreceiver");
this.registerReceiver(br,ifi);*/
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.startButton);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.android.myreceiver");
//intent.setAction("com.android.innerbreceiver");
intent.putExtra("str", "message");
sendBroadcast(intent);
}});
}
/*BroadcastReceiver br = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
Log.v("InnerReceiver", intent.getStringExtra("str")+"");
}
};*/
/*public void onDestroy()
{
super.onDestroy();
this.unregisterReceiver(br);
}*/
}
简单的接收器MyReceiver.java
package com.android;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
Log.v("MyReceiver", arg1.getStringExtra("str")+"");
}
}
注册文件AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".BroadcastReceiverActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".MyReceiver">
<intent-filter>
<action android:name="com.android.myreceiver"/>
</intent-filter>
</receiver>
</application>
</manifest>
接收器只接收与自己有相同action的广播,<intent-filter>设置发送的广播相同的action就可以了,也就是频率相同。