Android中的进程通信之Broadcast
来源:互联网 发布:数据库系统全书 豆瓣 编辑:程序博客网 时间:2024/05/17 03:04
广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。
在应用程序中发送广播比较简单。只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。
先建一个android工程:sendbroadcast。在XML布局文件中放两个组件:EditText和Button,当单击按钮后,会弹出显示 EditText组件中文本的对话框,关闭对话框后, 会使用sendBroadcast方法发送消息,并将EditText组件的文本通过Intent对象发送出去。完整的代码如下:
package net.blogjava.mobile.sendbroadcast;... ...public class Main extends Activity implements OnClickListener{ private EditText editText; @Override public void onClick(View view) { new AlertDialog.Builder(this).setMessage(editText.getText().toString()) .setPositiveButton("确定", null).show(); // 通过Intent类的构造方法指定广播的ID Intent intent = new Intent("net.blogjava.mobile.MYBROADCAST"); // 将要广播的数据添加到Intent对象中 intent.putExtra("text", editText.getText().toString()); // 发送广播 sendBroadcast(intent); } ... ...}
发送广播并不需要在AndroidManifest.xml文件中注册,但接收广播必须在AndroidManifest.xml文件中注册 receiver。下面来编写一个接收广播的应用程序。首先建立一个android工程:receiver。然后编写一个MyReceiver类,该类是 BroadcastReceiver的子类,代码如下:
package net.blogjava.mobile.receiver;... ...public class MyReceiver extends BroadcastReceiver{ // 当sendbroadcast发送广播时,系统会调用onReceive方法来接收广播 @Override public void onReceive(Context context, Intent intent){ // 判断是否为sendbroadcast发送的广播 if ("net.blogjava.mobile.MYBROADCAST".equals(intent.getAction())) { Bundle bundle = intent.getExtras(); if (bundle != null) { String text = bundle.getString("text"); Toast.makeText(context, "成功接收广播:" + text, Toast.LENGTH_LONG).show(); } } }}
当应用程序发送广播时,系统会调用onReceive方法来接收广播,并通过intent.getAction()方法返回广播的ID,也就是在发送广播时Intent构造方法指定的字符串。然后就可以从Bundle对象中获得相应的数据了。
最后还需要在AndroidManifest.xml文件中注册receiver,代码如下:
<!-- 注册receiver <receiver android:name="MyReceiver"> <intent-filter> <action android:name="net.blogjava.mobile.MYBROADCAST" /> </intent-filter></receiver>
在注册MyReceiver类时需要使用<receiver>标签,android:name属性指定MyReceiver类,<action>标签的android:name指定了广播的ID。
首先运行receiver程序,然后就可以关闭receiver程序了。接收广播并不依赖于程序的状态。就算程序关闭了,仍然可以接收广播。然后再启动 sendbroadcast程序。并在文本框中输入“android”,然后单击按钮,会弹出一个显示文本框内容的对话框,如图9所示。当关闭对话框后,会 显示一个Toast信息提示框,这个信息框是由receiver程序弹出的。如图10所示。
- Android中的进程通信之Broadcast
- android进程间通信之Broadcast
- [心得]Android进程间通信之Broadcast Receiver
- android 进程间通信之广播消息(Broadcast)
- Android中的进程通信之Content Provider
- [Android开发]android 跨进程通信之Broadcast
- android中的进程间通信
- Android中的多进程通信
- Android中的多进程通信
- Android 进程通信之AIDL
- Android进程通信之AIDL
- Android 进程通信之AIDL
- android 进程通信之messenger
- Android之aidl进程通信
- Android process之进程通信
- android 进程间通信之SOCKET通信
- android中的broadcast action
- android中的broadcast
- 机房收费系统——存储过程的运用
- iOS开发 从一个空项目创建ViewController和xib
- 用thinkphp实现验证码
- 对 dpif_class 结构体的一点认识
- MOV AL,061h
- Android中的进程通信之Broadcast
- UVA 1395 - Slim Span
- vim简单使用教程
- UVA - 307 Sticks(回溯+剪枝)
- hdu3342——Legal or Not
- 你生日那天你说你说呢
- 数组作为堆栈实现表达式整型计算器
- KEIL产生WARNINGL15: MULTIPLE CALL TO SEGMENT的原因及解决方法
- PADS软件概述