您的位置:首页 > 移动开发 > Android开发

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”就是我们要接受的广播的频道,我们只接受这个频道上的广播.

第四步,运行代码,看效果

我们分别将两个程序运行一次,然后切换到发送者程序页面(不要结束进程):

我们点击发送按钮,此时弹出接收者弹出的相应信息

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: