Android使用广播实现跨进程通信
2017-03-01 18:28
225 查看
Android使用广播实现跨进程通信
作者:燕潇洒导读: 如果您还不知道广播的基本使用,请参阅: 广播的动态注册和静态注册以及系统广播的使用! Android提供了四种进程间通讯的方式.(1)、Activity(页面). (2)、ContentProvider(内容提供者).(3)、BroadCastReciever(广播).(4)service(服务).我们调用拨打电话功能时,其实就使用了第一种方式;ContentProvider可以访问其他应用程序返回的 Cursor对象,从而获取数据; AIDL service可以公开程序的某个接口,从而让其他程序访问这个接口;BroadCastReciever是一种被动通信,客户端只能接收数据和相应,而不能向服务端发送信息。我们今天所讲的就是使用BroadCastReciever来实现被动的进程间的通信;来看一个简单的例子:
第一步,我们新建一个Project,里面有一个页面和页面对应的布局,接下来我们写布局内容
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="horizontal" android:id="@+id/activity_broad_cast_receiver" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/btn_send_notify" android:textSize="30sp" android:text="发送通知" android:textColor="@color/colorAccent" android:layout_width="match_parent" android:layout_height="100dp" /> </LinearLayout>
页面中只有一个按钮,这个按钮我们会用来发送一个广播;接下来,我们开始写发送广播的内容.
第二步,初始化布局控件,在按钮的点击事件中发送一个广播
private Button btn_send_notify; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_broad_cast_receiver); btn_send_notify = (Button) findViewById(R.id.btn_send_notify); btn_send_notify.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); }
我们首先初始化了发送按钮,并且给了按钮一个点击事件,再点击事件中,我们需要发送广播,那么如何发送广播呢?
sendBroadcast(new Intent("SendNotify"));
在发送按钮的点击事件中我们调用方法sendBroadcast();传入一个Intent对象,并设置action(就相当于生活中广播的频道),其实现在发送广播的内容我们就已经完成了,发送者完成了,我们来看看接受者怎么接收发送者传来的消息呢?
第三步,我们再次创建一个Project,依然只有一个页面和对应的布局
与上一个project不同的是,新的Project我们不要在页面做什么(在这个例子中),但是我们需要创建一个广播接受者来接收发送者传来的消息:
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if("SendNotify".equals(intent.getAction())){ Toast.makeText(context, "收到广播"+"-----》", Toast.LENGTH_SHORT).show(); } } }
我们继承BroascastReceiver创建一个接收者,还记得发送广播时我们设置的action吗?此处我们需要用到他了,当然,在这里我们完全可以不用过滤不同的广播,可是如果在一个Project中有很多地方发送了广播,而此时我们有没有指定我们想要哪一种广播,你可以试想一下,如果你正在手机上听广播,你没有设置要听哪一个频道的广播,此时应该有两种情况,1.你一个都听不到;2.各种广播轮番轰炸;所以我们只接受指定的广播,别的广播,我们不接收;收到广播后,我们会弹出一个提示,告诉你收到通知了!
虽然我们又了接受者,可我们还没有注册它,这就相当于,他虽然存在,但是程序不知道有一个广播接收者,所以我们需要注册,打开清单文件,在application节点下,创建receiver节点:
<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="SendNotify"></action> </intent-filter> </receiver>
第一句话就是注册指定的广播接收者,中间部分是过滤指定的广播,”SendNotify”就是我们要接受的广播的频道,我们只接受这个频道上的广播.
第四步,运行代码,看效果
我们分别将两个程序运行一次,然后切换到发送者程序页面(不要结束进程):
我们点击发送按钮,此时弹出接收者弹出的相应信息
相关文章推荐
- Android使用Messenger实现进程间双向通信
- Android基础--使用AIDL实现进程间的通信
- Android中AIDL使用 及 AIDL实现进程间的通信
- Android基础--使用AIDL实现进程间的通信之复杂类型传递
- Android开发之使用AIDL和远程服务实现进程通信
- Android 使用Messenger和Aidl实现跨进程通信
- Android AIDL使用详解 实现进程间的通信
- 【随心笔录】Android AIDL使用,实现跨进程通信
- android使用AIDL实现进程间的通信
- Android使用ContentProvider实现多进程通信
- Androidk开发入门之使用AIDL实现进程通信
- Android 使用AIDL实现进程间的通信
- Android 使用AIDL实现进程间的通信
- Android 使用AIDL实现进程之间的通信(一)
- Android 使用Messenger实现跨进程之间通信
- 使用管道实现进程间的双向通信
- 使用AIDL实现进程间的通信 (转载liuhe688)
- 使用AIDL和远程服务实现进程通信
- Android通过AIDL实现下载进程通信
- 在Android上使用LocalSocket实现上层Java和底层C++的通信