博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android跨进程通信广播(Broadcast)
阅读量:5348 次
发布时间:2019-06-15

本文共 2071 字,大约阅读时间需要 6 分钟。

广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通,在应用程序中发送广播比较简单。只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。

先建一个android工程:sendbroadcast。在XML布局文件中放两个组件:EditText和Button,当单击按钮后,会弹出显示 EditText组件中文本的对话框,关闭对话框后, 会使用sendBroadcast方法发送消息,并将EditText组件的文本通过Intent对象发送出去。完整的代码如下:

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的子类,代码如下:

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,代码如下:

在注册MyReceiver类时需要使用<receiver>标签,android:name属性指定MyReceiver类,<action>标签的android:name指定了广播的ID。

首先运行receiver程序,然后就可以关闭receiver程序了。接收广播并不依赖于程序的状态。就算程序关闭了,仍然可以接收广播。然后再启动 sendbroadcast程序。并在文本框中输入“android”,然后单击按钮,会弹出一个显示文本框内容的对话框,如图9所示。当关闭对话框后,会 显示一个Toast信息提示框,这个信息框是由receiver程序弹出的。如图10所示。

转载于:https://www.cnblogs.com/chenxibobo/p/9648797.html

你可能感兴趣的文章
leetcode 解题 String to Integer (atoi)(C&python)
查看>>
梦幻西游网页版无法在虚拟机上运行【游戏】【页游】【虚拟机】
查看>>
浅谈Go中的time.After
查看>>
[转载] 在java中为什么变量1000 = 1000 返回false,但是100=100返回true?
查看>>
java 相关内容使用(关键字 private default protect public)
查看>>
协程的优点(Python)
查看>>
Python Thrift 简单示例
查看>>
MongoDB优化
查看>>
第06篇 MEF部件的生命周期(PartCreationPolicy)
查看>>
Django 基础 web框架本质
查看>>
25 python socket网络编程
查看>>
sprint
查看>>
tensorflow的gpu版本错误
查看>>
Codefroces432 div2 A,B,C
查看>>
android开发里跳过的坑——图片文件上传失败
查看>>
Java 数据库简单操作类
查看>>
IO字节流
查看>>
这样学Linux基本命令,事半功倍
查看>>
2 Modals of necessity
查看>>
sqlite错误 Abort due to constraint violation column id is not unique id没开启自动增长
查看>>