闲来没事,有很多人在问怎么学习,就随便的写一个例子吧。
理解什么是广播。在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制。就像生活中的广播一样有电台在不断的发送广播,至于谁会去接收不用知道也不用管,重要的是谁要听谁就调频到想听的频道就可以了。显然是一种松散的耦合结构。显然要实现广播就需要2个东西:发送消息的电台和接收器,
Android中也类似,分为异步广播和同步(顺序)广播:
Broadcast Receiver(广播接收器)包含两部分功能:一是发送广播消息,另一个是接收广播消息。系统和应用程序都可以发送广播消息,发送广播实际上就是调用sendBroadCast()方法向系统内部发送一个Intent对象,这与startActivity()的作用是类似的,所不同的是:发送广播只能启动Broadcast Receiver对象,而不会启动任何Activity或者Service对象。
final String BROADCAST_TAG = "com.csu.lz" ;//电台频率
//按钮事件
public void send_brodcast(View v){
//发送广播
Intent intent = new Intent(BROADCAST_TAG);
intent.putExtra("key1", "hello , this's a fm radio");
sendBroadcast(intent);//发送广播
}
好啦电台已经在准备就绪,接下来谁要收听呢?好办,准备一个收音机就可以了。写一个类继承BroadcastReceiver 重写onReceive
@Override
public void onReceive(Context context, Intent intent) {
//在这里接受
String msg = intent.getStringExtra("key1");
Toast.makeText(context, "我是收音机,现在收听FM999,我听到的是:" + msg, Toast.LENGTH_SHORT).show();
}
最后需要在清单文件中注册接受者:
<receiver android:name=".MyBroadCastReceiver">
<intent-filter>
<action android:name="com.csu.lz"/>
</intent-filter>
</receiver>
一个简单的广播的发送和接受就已经完成了。
淡然我们还有动态的方式来完成广播的接收:registerReceiver(广播接受对象,IntentFilter) ;
我们也可以在 onResume中:
MyBroadCastReceiver myrecevier ;
@Override
protected void onResume() {
super.onResume();
IntentFilter intFilter = new IntentFilter(BROADCAST_TAG);
//intFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
myrecevier = new MyBroadCastReceiver();
registerReceiver(myrecevier, intFilter);//注册
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(myrecevier);//
}
这样就不需要在清单里去定义了。
事实上 Android系统就定义了很多广播我们就可以利用这些获取我们要用的信息,比如电池信息等等。
1.“android.provider.Telephony.SMS_RECEIVED” 收到短信
2. Intent.ACTION_BATTERY_CHANGED 剩余的手机电池量
3. Intent.ACTION_MEDIA_MOUNTED SD 卡成功挂载
........
2. Intent.ACTION_BATTERY_CHANGED 剩余的手机电池量
3. Intent.ACTION_MEDIA_MOUNTED SD 卡成功挂载
4. Intent.ACTION_MEDIA_UNMOUNTED SD 卡未挂载
5. Intent.ACTION_NEW_OUTGOING_CALL 拨打电话
TelephonyManager.ACTION_PHONE_STATE_CHANGED 来电
6. Intent.ACTION_PACKAGE_ADDED 执行安装
7. Intent.ACTION_PACKAGE_REMOVED 执行卸载
5. Intent.ACTION_NEW_OUTGOING_CALL 拨打电话
TelephonyManager.ACTION_PHONE_STATE_CHANGED 来电
6. Intent.ACTION_PACKAGE_ADDED 执行安装
7. Intent.ACTION_PACKAGE_REMOVED 执行卸载