http://www.itkee.com/developer/detail-339e.html
Register
主要用于service之间的通信;如底层有事件通知上层,一般用这个消息机制;

Broadcast
主要用于APP层数据的通信,比如广播电量低,有耳机插入,进入/退出飞行模式等等事件;
在应用程序代码中进行注册

特点: 在oncreat函数中进行广播机制的注册,当这个activity/service/application生命周期结束时,应该去注册unregisterReceiver;即响应这个广播action必须这个activity/service/application正处于活动状态中;
在AndroidManifest.xml中进行注册
在packages包的AndroidManifest.xml中定义接受器,过滤挑选广播中的Action是否匹配,如下例:
<receiver android:name="SipBroadcastReceiver"> <intent-filter> <action android:name="com.android.phone.SIP_INCOMING_CALL" /> <action android:name="com.android.phone.SIP_ADD_PHONE" /> <action android:name="com.android.phone.SIP_REMOVE_PHONE" /> <action android:name="android.net.sip.SIP_SERVICE_UP" /> </intent-filter> </receiver>
接收器为SipBroadcastReceiver,在类SipBroadcastReceiver中继承了Broadcast实现了onRecieve()方法;对广播的事件进行处理;
特点:应用程序结束了之后,该BroadcastReceiver同样会接受到广播,一直处于活动状态,
Intent
主要用于activity之间消息的传递和activity与service之间消息的传递;不适合service于service之间消息的传递;
显示intent
在构造intent时,就已经指定接收者是谁; 构造intent用的方法是:
- public Intent()
- public Intent(Context packageContext, Class<?> cls)
- public Intent(String action, Uri uri,Context packageContext, Class<?> cls)
以OutgoingCallBroadcaster为例;OutgoingCallBroadcaster启动后;若是拨打电话且拨打的号码是紧急号码,则启动DialtactsActivity页面;
if (Intent.ACTION_CALL.equals(action)) { if (isPotentialEmergencyNumber) { ...... Intent invokeFrameworkDialer = new Intent(); invokeFrameworkDialer.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity"); invokeFrameworkDialer.setAction(Intent.ACTION_DIAL); invokeFrameworkDialer.setData(intent.getData()); invokeFrameworkDialer.putExtra(SUBSCRIPTION_KEY, mSubscription); startActivity(invokeFrameworkDialer); finish(); return; }
隐式intent
在构造intent时,intent发送者不指定接收者,不关心接受者是谁;接收者在AndroidManifest.xml文件中通过intent fliter中声明自己可以接受哪些intent; 构造intent用的方法是:
- public Intent(String action)
- public Intent(String action, Uri uri)
以拨打一路电话为例:incallscreen中有个添加一路通话的按钮;按下这个按钮就会调用phoneutils中下面这个函数;并发出隐式的intent;
static void startNewCall(final CallManager cm) { ...... Intent intent = new Intent(Intent.ACTION_DIAL); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ...... app.mContext.startActivity(intent); }
packages包下的androidmanifest.xml部分对应内容如下,因此启动了OutgoingCallBroadcaster这个activity;
<activity android:name="OutgoingCallBroadcaster" ...... <intent-filter> <action android:name="android.intent.action.CALL" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="tel" /> </intent-filter> ......
AIDL
AIDL应用于不同进程之间的通信,可以满足多线程的处理,因此可以同时接受并处理多个client端的请求;

服务器端继承了Ixxx.stub;Ixxx.stub: 实现的比较复杂,主要使用了IPC的机制给client端提供server端的实例,好供client端调用server端的函数;
以下为phone状态变化通过aidl方式传递消息的机制:

相关推荐
在Android开发中,数据通信是不可或缺的一个重要环节,它...本特刊“【eoeAndroid特刊】第六期 数据通信-成为Android数据流大师.pdf”应该会提供更详尽的理论解析和实践案例,助你在Android数据通信领域更上一层楼。
- **串口通信**:串口通信是通过串行数据传输的方式进行设备间的通信,常见的串口接口有RS-232、USB转串口等。在Android设备上,串口通常用于与外部硬件设备如模块、传感器等进行数据交互。 - **Android串口API**...
在 Android 中,网络通信方式是指设备间的数据交换方式。Android 中常用的网络通信方式有 Socket 通信、HTTP 通信等。本文将详细介绍 Socket 通信在 Android 中的应用。 一、Socket 通信 Socket 是一种常用的网络...
这篇博客“android中的数据通信”可能涵盖了Android数据通信的各种方法和技术,包括本地数据存储、网络通信和蓝牙等。以下是对这些知识点的详细说明: 1. **本地数据存储**: - **SharedPreferences**: Android...
本文将详细介绍Android中的四种主要数据存储方式:SharedPreferences、File、SQLite数据库以及网络存储。 1. SharedPreferences: SharedPreferences是Android提供的一种轻量级的数据存储方式,适合存储用户偏好...
在Android平台上进行串口通信是实现设备间交互的重要方式,特别是在一些特定的应用场景,如温度传感器数据的实时读取和监控。在这个项目中,我们关注的是一个专为疫情期间设计的Android应用程序,它能够通过串口与...
CAN协议是一种多主站总线,允许在分布式实时控制系统中进行数据通信。它定义了两种帧格式:标准帧(11位标识符)和扩展帧(29位标识符)。在标准帧中,标识符范围是0x000到0x7FF,而在扩展帧中,标识符范围是0x...
基于AMF的Android数据通信 Android 数据通信是 Android移动应用开发的重要组成部分,选择合适的数据通信格式对提高应用性能和用户体验非常重要。本文将讨论基于AMF(Action Message Format)的Android数据通信,AMF...
每种跨进程通信方式都有其适用场景,Activity适合轻量级交互,Content Provider适用于数据共享,Broadcast适合全局事件通知,而Service和AIDL则适合处理需要长时间运行或复杂交互的跨进程任务。 在实际开发中,...
这个过程通常涉及到多个技术层面,包括USB通信协议、Android开发者选项、APP编程接口(API)以及数据传输机制。让我们深入探讨一下这些关键知识点。 首先,USB(Universal Serial Bus)是一种标准接口,允许不同...
本论文探讨了Android设备与STM32单片机之间的通信方式,涵盖了音频通信、串口通信和Bluetooth通信三种不同的技术实现,并对每种通信方式的特点、应用场景、优缺点进行了详细分析。 1. 音频通信 音频通信通过Android...
总结来说,Android通过BroadcastReceiver监听蓝牙设备的状态变化,使用BluetoothAdapter和BluetoothDevice进行设备扫描和连接,通过BluetoothSocket进行数据通信。在穿戴设备的开发中,理解并熟练掌握这些蓝牙通信...
在Android开发中,TCP(Transmission Control Protocol)通讯是常见的数据传输方式,特别是在需要稳定、可靠的数据交换场景下。本文将详细讲解如何在Android端实现TCP通讯,并介绍如何使用提供的依赖库进行集成,...
这些驱动类会处理与USB设备的通信细节,例如设置波特率、数据位、停止位和校验方式等。 **USB Serial for Android库** 为了简化开发过程,通常会使用开源库,如"USB Serial for Android"。这个库提供了一个通用的...
通过http协议进行数据通信,采用的是json方式,实现Android手机与服务器端进行连接通信
本文将详细介绍Android中Activity之间数据传递的多种方式及其适用场景。 一、Intent传递数据 Intent是Android系统中用于启动组件(如Activity)的一种消息对象,同时也可以用来在组件间传递数据。Intent的数据传递...
串口通信,也称为串行通信,是一种数据传输方式,通过串行数据线一次传输一个比特位。在Android系统中,由于安全考虑,原生并不支持直接进行串口操作,但通过Java的反射机制或者第三方库,我们可以实现这一功能。 ...
串口通信,也称为串行接口通信,是一种数据通信方式,通过串行数据线将数据一位一位地传输。在Android系统中,虽然原生支持网络和蓝牙通信,但并不直接支持串口通信,因此需要额外的库如`android-serialport-api`来...
Android提供了多种实现子线程间通信的方式: 1. **Handler-Message机制**:这是最常用的一种方式,通过创建Handler对象,一个线程(通常是主线程)注册Handler,另一个线程发送Message到MessageQueue,Handler会...