60
第第第 Android 第第第第

第八章 Android 网络通信

Embed Size (px)

DESCRIPTION

第八章 Android 网络通信. 本章主要内容. 网络的重要性. 网络化信息化的世界 短信、电话 无线上网 移动 , 自由 ,随时随地. Android 支持的通信模式. GSM EDGE 3G ……. WIFI BLUETOOTH NFC. Android 网络通信基础. GSM. 全球移动通信系统 ( Global System for Mobile Communications ). 当前应用最为广泛的移动电话标准。全球超过 200 个国家和地区超过 10 亿人正在使用 GSM 电话。. Android 网络通信基础. GSM. - PowerPoint PPT Presentation

Citation preview

Page 1: 第八章  Android 网络通信

第八章 Android 网络通信

Page 2: 第八章  Android 网络通信

本章主要内容

Android 网络通信基础

Android Http 通信

WIFI

蓝牙

Page 3: 第八章  Android 网络通信

网络化信息化的世界短信、电话无线上网移动,自由,随时随地

网络的重要性

Page 4: 第八章  Android 网络通信

Android 支持的通信模式

GSM

EDGE

3G

……

WIFI

BLUETOOTH

NFC

Page 5: 第八章  Android 网络通信

Android 网络通信基础

GSM

全球移动通信系统( Global System for Mobile Communications )

当前应用最为广泛的移动电话标准。全球超过200 个国家和地区超过 10 亿人正在使用 GSM 电话。

Page 6: 第八章  Android 网络通信

Android 网络通信基础

GSM

GSM 标准的广泛使用使得在移动电话运营商之间签署“漫游协定”后用户的国际漫游变得很平常。

GSM 较之它以前的标准最大的不同是他的信令和语音信道都是数字的,因此 GSM 被看作是第二代( 2G )移动电话系统。 GSM 标准当前由 3GPP 组织负责制定和维护。

Page 7: 第八章  Android 网络通信

Android 网络通信基础

EDGE

增强型数据速率 GSM 演进技术Enhanced Data Rate for GSM Evolution

从 GSM 到 3G 的过渡技术能够充分利用现有的 GSM 资源弹性优势工作在 TDMA 和 GSM 网络提高了 GPRS 信道编码效率及其高速移动数据标准

Page 8: 第八章  Android 网络通信

Android 网络通信基础

3G

第三代移动通信技术( 3rd-generation , 3G ) 3G 就是指 IMT-2000 ( International Mobile Telecommunications-

2000 ),是国际电信联盟( ITU )定义的第三代无线通信的全球标准。

IMT-2000 规定移动终端的连接速度:

以车速移动时 —— 144Kbps

室外静止或步行时—— 384Kbps

室内 —— 2Mbps

Page 9: 第八章  Android 网络通信

Android 网络通信基础

3G

目前存在的几种标准: WCDMA ( Wideband CDMA )——欧洲 CDMA2000 —— 美国高通北美公司 TD-SCDMA (时分同步 CDMA ) —— 中国大陆 WiMAX —— 微波存取全球互通( 07 年提出) (Worldwide Interoperability for Microwave Access)

Page 10: 第八章  Android 网络通信

Android 网络通信基础

3G—— 应用

宽带上网 视频通话 手机电视 无线搜索

3G 目前广泛地运用在:

手机音乐 手机购物 手机网游

Page 11: 第八章  Android 网络通信

Android 网络通信基础

WiFi

Wireless Fidelity ,中文译为“无线兼容认证”

实质——一种商业认证 技术——短程无线传输 现状——带 WiFi 的便携式设备是潮流

Page 12: 第八章  Android 网络通信

Android 网络通信基础

WiFi

常见的 WiFi 使用形式——无线路由器

覆盖范围—— 70 至 120 米 使用场合——公司、家庭、公共场所 优点——方便的建立局域网、低成本、使用简单

Page 13: 第八章  Android 网络通信

Android 网络通信基础

WiFi—— 应用

无线电波的覆盖范围广 传输速度高 使用门槛比较低 消除布线的麻烦 发射功率低,健康安全

WiFi 相比其他技术有如下一些特点:

Page 14: 第八章  Android 网络通信

Android 网络通信基础

Bluetooth

蓝牙的标志 开放式无线通讯标准 设备短距离互联解决方案

定义:

优势: 无需驱动程序——独特的配置文件 小型化无线电 低功率、低成本、安全性、稳固 易于使用、即时连接

Page 15: 第八章  Android 网络通信

Android 网络通信基础

Bluetooth

蓝牙协议栈:

核心协议层( HCI 、 LMP 、 L2CAP 、 SDP ) 线缆替换协议层( RFCOMM ) 电话控制协议层( TCS-BIN ) 选用协议层

( PPP 、 TCP 、 IP 、 UDP 、 OBEX 、 IrMC 、 WAP

、 WAE )

Page 16: 第八章  Android 网络通信

Android 网络通信基础

Bluetooth

蓝牙规范( profile )——为了保证蓝牙设备的互通性而制定的一系列规范:

蓝牙立体声音频传输规范( A2DP ) 基本图像规范( BIP ) 基本打印规范( BPP ) 无线电话规范( CTP ) 蓝牙耳机规范( HP ) 文件传输规范( FTP ) ……

Page 17: 第八章  Android 网络通信

Android 网络通信基础

NFC

Near Field Communication (近场通讯)技术起源:

NFC 由非接触式射频识别 (RFID)及互联互通技术整合演变而来 , 在单一芯片上结合感应式读卡器、感应式卡片和点对点的功能,能在短距离内与兼容设备进行识别和数据交换。

Page 18: 第八章  Android 网络通信

Android 网络通信基础

NFC

轻松、安全、迅速的通信 传输范围小——独特的信号衰减技术 带宽高、能耗低

技术优势:

应用场合:

门禁、公交 手机支付

Page 19: 第八章  Android 网络通信

Android 网络通信基础

Andrion 提供的网络接口

Android 平台提供了三种网络接口,它们分别是:

java.net.*

org.apache.*

android.net.*

开发人员可以使用这些接口方便的进行 Android 网络编程。

Page 20: 第八章  Android 网络通信

Android Http 通信

Http 简介

Http ( Hypertext Transfer Protocol )即超文本传输协议,它是Web 的基础协议,是建立在 TCP 上的一种应用。

Http 连接特点: 客户端发送的每次请求都需要服务器返回响应,并在请求结束后释放连接,这个建立连接到关闭连接的过程称为“一次连接”。由于 HTTP 在每次请求结束后都会主动释放连接,因此 HTTP 连接是一种“短连接”、“无状态”的连接。

Page 21: 第八章  Android 网络通信

Android Http 通信

Http 的特点

1. 支持客户 /服务器模式;2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常

用的有 GET 、 POST 。3. 灵活: HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-

Type 加以标记;4. 无状态: HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。

Page 22: 第八章  Android 网络通信

Android Http 通信

使用 HttpClient 接口通信示例

Http请求数据通常使用 GET 和 POST向服务器提交表单而获取响应的方式获得数据。主要有以下几种区别:

1. GET 方法是将参数数据队列附加到 URL 的 ACTION属性中,值和表单内各个字段一一对应,以明文的方式存在于 URL 中。而 POST 方法则是将数值内容放置在 HTML HEADER 内一起传送至 ACTION属性所指的 URL 地址;

2. 对于 GET 方法,服务端采用 Request.QueryString获取变量的值,而对于 POST 方法,服务端采用 Request.Form获取提交的数据。

3. 一般来说 GET 方法项服务器传送的数据量较小。而 POST 方法传送的数据量较大。

Page 23: 第八章  Android 网络通信

Android Http 通信

使用 HttpClient 接口通信示例

2 使用 GET 方法1 初始状态 3 使用 POST 方法

Page 24: 第八章  Android 网络通信

Android Http 通信

使用 HttpClient 接口通信示例

使用 GET 方法请求数据的代码段如下:protected void httpClientGet() { //GET 请求的 url ,可以看到 url 中 weather 的值为 chengdu String googleWeatherUrl = "http://www.google.com/ig/api?hl=zh-

cn&weather=chengdu";//DefaultHttpClient ,默认的 HttpClient 类DefaultHttpClient httpclient = new DefaultHttpClient();//HttpGetHttpGet httpget = new HttpGet(googleWeatherUrl);//ResponseHandler ,用于处理服务端返回的响应ResponseHandler<String> responseHandler = new BasicResponseHandler();try {

String content = httpclient.execute(httpget, responseHandler);Toast.makeText(getApplicationContext(), " 连接成功 !",

Toast.LENGTH_SHORT).show();// 设置 TextView ,显示获取的网页内容tv.setText(content);

} catch (Exception e) {Toast.makeText(getApplicationContext(), " 连接失败 ",

Toast.LENGTH_SHORT).show();e.printStackTrace();

}httpclient.getConnectionManager().shutdown();// 关闭连接

}

Page 25: 第八章  Android 网络通信

Android Http 通信

使用 HttpClient 接口通信示例

使用 POST 方法请求数据的代码如下:protected void httpClientPost() {

try{ // 定义需要获取的内容来源地址

final String SERVER_URL = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather";

// 根据内容来源地址创建一个 Http 请求HttpPost request = new HttpPost(SERVER_URL); // 添加参数List params = new ArrayList();params.add(new BasicNameValuePair("theCityCode", " 成都 "));params.add(new BasicNameValuePair("theUserID", "")); // 设置参数的编码request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));// 发送请求并获取反馈, 解析返回的内容HttpResponse httpResponse = new

DefaultHttpClient().execute(request);// 如果返回状态码不为 404 ,即 URL 无误则显示获取的内容if (httpResponse.getStatusLine().getStatusCode() != 404){

String result = EntityUtils.toString(httpResponse.getEntity());

tv.setText(result.toString());}

}catch (Exception e) {}

}

Page 26: 第八章  Android 网络通信

String Url = "http://www.google.com/ig/api?weather=chengdu";URL url = new URL(googleWeatherUrl);HttpURLConnection httpconn = (HttpURLConnection)

url.openConnection();

Android Http 通信

使用 HttpUrlConnection 接口通信示例

HttpURLConnection继承自 URLConnection 。要获取HttpURLConnection类的实例,需要使用 openConnection() 方法来获取,代码如下:

Page 27: 第八章  Android 网络通信

Android Http 通信

使用 HttpUrlConnection 接口通信示例

5 使用 GET 方法4 初始状态 6 使用 POST 方法

Page 28: 第八章  Android 网络通信

HttpURLConnection 使用 GET 方法获取数据的关键代码如下:

Android Http 通信

使用 HttpUrlConnection 接口通信示例

// 获取 HttpURLConnection 实例HttpURLConnection httpconn = (HttpURLConnection)

url.openConnection();if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) {

Toast.makeText(getApplicationContext(), " 连接 Google Weather API 成功 !", Toast.LENGTH_SHORT).show();

// InputStreamReader ,用于读取网页内容InputStreamReader isr = new

InputStreamReader(httpconn.getInputStream(), "utf-8");int i;String content = "";// 从流中读取数据while ((i = isr.read()) != -1) {

content = content + (char) i;}isr.close();// 设置 TextViewtv.setText(content);

}//disconnecthttpconn.disconnect();

Page 29: 第八章  Android 网络通信

Android Http 通信

使用 HttpUrlConnection 接口通信示例

HttpURLConnection 使用 POST 方法请求数据需要改变的主要有两处,一是需要使用 setRequestMethod() 方法,二是使用 DataOutputStream向服务器写入参数值。代码如下:

// 使用 HttpURLConnection 打开连接HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();// 因为要求使用 Post 方式提交数据,需要设置为 trueurlConn.setDoOutput(true);urlConn.setDoInput(true);// 设置以 Post 方式,注意此处的“ POST” 必须大写urlConn.setRequestMethod("POST");//Post 请求不能使用缓存urlConn.setUseCaches(false);urlConn.setInstanceFollowRedirects(true);// 配置本次连接的 Content-Type ,配置为 application/x-www-form-urlencodedurlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 连接,从 postUrl.openConnection() 至此的配置必须在 connect 之前完成// 要注意的事 connection.getOutputStream 会隐含地进行 connect 。urlConn.connect();//DataOutputStream 流上传数据DataOutputStream out=new DataOutputStream(urlConn.getOutputStream());// 要上传的参数String content="par="+ URLEncoder.encode("POSTTransferData", "gb2312");// 将要上传的内容写入流中out.writeBytes(content);// 刷新,关闭out.flush();out.close();

Page 30: 第八章  Android 网络通信

Android WiFi

开发

Android SDK 提供的相关包: android.net.wifi

ScanResult 用于描述一个已经被检测到的 wifi 接入点。

WifiConfiguration 该类代表了一个已经配置好的 wifi 网络,包括了该网络的一些安全设置。例如接入点密码,接入点通讯所采用的安全标准。

WifiConfiguration.AuthAlgorithm 公认的 IEEE 802.11 标准认证算法。

Page 31: 第八章  Android 网络通信

Android WiFi

相关类介绍

WifiConfiguration.GroupCipher 公认的组密码。 WifiConfiguration.KeyMgmt 公认的密钥管理方案。 WifiConfiguration.PairwiseCipher 公认的用于 WPA 的成对

密码标准。 WifiConfiguration.Protocol 公认的安全协议WifiConfiguration.Status 网络所可能存在的状态。

Page 32: 第八章  Android 网络通信

Android WiFi

相关类介绍

WifiInfo 描述了各个 wifi 连接的状态,该连接是否处于活动状态或者是否处于识别过程中。

WifiManager 这个类比较重要。它提供了用于管理 wifi连接的各种主要 API 。详见表后说明。

WifiManager.MulticastLock 允许应用程序接收 wifi 的多播数据包。

WifiManager.WifiLock 允许应用程序永久地保持 wifi 连接(防止系统自动回收)。

Page 33: 第八章  Android 网络通信

Android WiFi

重要类

Android 操作 WiFi 的重要类—— WifiManager

这个类提供了最主要的用于管理 wifi 连接的 API 。

通过调用 Context.getSystemService(Context.WIFI_SERVICE)

方法来得到系统提供的 WifiManager ,代码如下:

WifiManager mWifiManager = (WifiManager)

context.getSystemService(Context.WIFI_SERVICE);

Page 34: 第八章  Android 网络通信

Android WiFi

WifiManager主要用于处理的事务

已经配置好的网络连接列表。 如果当前有连接存在的话,可以得到当前正处于活动状态的 wifi 连接的控制权,可以通过它建立或者断开连接,并且可以查询该网络连接的动态信息;

通过对已经扫描到的接入点的足够信息来进行判断,得出一个最好的接入点进行连接。

定义了很多用于系统广播通知的常量,它们分别代表了WiFi 状态的改变。

Page 35: 第八章  Android 网络通信

Android WiFi

WiFi 的开发补充

Android 网络连接管理类—— ConnectivityManager

该类用于管理抽象意义上的“网络连接”

监控网络连接(包括WiFi , GPRS , UMTS等等); 当网络连接发生改变时,向系统广播这一改变; 当失去了当前的网络连接时,尝试切换到另外一个连接; 提供了允许其他应用程序调用的 API让应用程序可以方便地查询当前的网络状态。

它完成的主要任务是:

Page 36: 第八章  Android 网络通信

Android WiFi

WiFi 的权限获取

要在应用程序中对 Android 系统的 WiFi 设备进行相关操作,需要在项目中的 AndroidManifest.xml 中选择性地添加如下几句用于声明权限的语句:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"></uses-permission> <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

Page 37: 第八章  Android 网络通信

Android WiFi

WiFi 开发——代码示例

// 取得 WifiManager 对象mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);// 取得 WifiInfo 对象mWifiInfo = mWifiManager.getConnectionInfo();// 打开 WIFIpublic void openWifi(){

if (!mWifiManager.isWifiEnabled()){

mWifiManager.setWifiEnabled(true);}

}

Page 38: 第八章  Android 网络通信

Android WiFi

WiFi 开发——代码示例

// 关闭 WIFIpublic void closeWifi(){

if (!mWifiManager.isWifiEnabled()){

mWifiManager.setWifiEnabled(false);}

}// 得到 WifiLock ,以便应用程序保持 wifi 连接public void acquireWifiLock(){

mWifiLock.acquire();}

Page 39: 第八章  Android 网络通信

// 解锁 WifiLockpublic void releaseWifiLock(){

if (mWifiLock.isHeld()) // 判断是否被锁定{

mWifiLock.acquire();}

}// 创建 WifiLockpublic void creatWifiLock(){

mWifiLock = WifiManager.createWifiLock("Lock");}

Android WiFi

WiFi 开发——代码示例

Page 40: 第八章  Android 网络通信

// 得到已经配置好的网络列表public List<WifiConfiguration> getConfiguration(){

return mWifiConfiguration;}//选择一个已配置好的网络进行连接public void connectConfiguration(int index){

//索引大于配置好的网络索引返回if(index > mWifiConfiguration.size()){

return;}// 连接配置好的指定 ID 的网络

mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true);

}

Android WiFi

WiFi 开发——代码示例

Page 41: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙开发

Android SDK 提供的相关包: android.bluetooth

API主要为应用程序提供如下几个功能: 1. 搜寻有效范围内的蓝牙设备; 2. 通过本地的蓝牙适配器来查询到与之配对的蓝牙设备; 3. 在配对的蓝牙设备之间建立 RFCOMM 信道; 4. 连接到其他设备的指定端口; 5. 在设备之间传输数据。

Page 42: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙 API

接口名 描述

BluetoothProfile 蓝牙规范的公用 API 接口,所有的蓝牙规范都必 须 实 现 这 个 接口。 Profile 目的 是 要确保Bluetooth 设备间的互通性。

BluetoothProfile.ServiceListener 用于在蓝牙客户设备连接或者断开连接时给它们发出通知的接口。

android.bluetooth包括了以下两个接口:

Page 43: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙 API

android.bluetooth包括了以下一些类:

类名 描述BluetoothA2dp 这个类作为对 BluetoothProfile 接口实现的实例,

这是对蓝牙的 A2DP规范的 API 实现类。

BluetoothAdapter 代表了本地的蓝牙适配器。BluetoothAssignedNumbers 蓝牙的指令编号。

BluetoothClass 代表蓝牙的类,这个类描述了蓝牙设备的特征和性能参数。

Page 44: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙 API

类名 描述BluetoothClass.Device 定义了所有的 device 类所用的常量。

BluetoothClass.Device.Major 定义了所有主要的 device 类所用的常量。

BluetoothClass.Service 定义了所有的 service 类所用的常量。

BluetoothHeadset 实现蓝牙耳机服务的公共 API 。

Page 45: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙 API

类名 描述BluetoothServerSocket 用于监听 socket 连接请求的类。

BluetoothSocket 一个已连接的或正在连接的 socket 类。

android.bluetooth 中用于建立连接的类:

类似于 Java API 中的 ServerSocket 和 Socket 类

Page 46: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙权限获取

要在应用程序中对 Android 系统的蓝牙设备进行相关操作,需要在项目中的 AndroidManifest.xml 中添加:<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

Page 47: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙示例——TestBluetooth

运行截图:

①程序初始化

②打开蓝牙

③允许搜索

④正在搜索

(项目文件保存在 /workspace目录,项目名称 TestBluetooth )

Page 48: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙示例——TestBluetooth

TestBluetooth项目文件结构:

源码包名: com.bluetooth

主 Activity : BluetoothActivity

查找蓝牙 Activity : DiscoveryActivity

工具类(对话框功能): SamplesUtils

执行查找界面的布局: discovery.xml

主界面布局: main.xml

Page 49: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙示例——TestBluetooth

AndroidManifest.xml:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.bluetooth"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name="BluetoothActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>接下页

Page 50: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙示例——TestBluetooth

AndroidManifest.xml (续):<activity android:name="DiscoveryActivity"

android:theme="@style/Theme.Transparent"><intent-filter>

<action android:name="android.intent.action.MAIN" />

<category

android:name="android.intent.category.DEFAULT" /></intent-filter>

</activity> </application> <!-- SDK 的版本至少要高于 5 --> <uses-sdk android:minSdkVersion="5" /> <!-- 声明需要使用蓝牙的权限 -->

<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /></manifest>

Page 51: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙示例——TestBluetooth

BluetoothActivity.java:== 代码较多,见书本

DiscoveryActivity.java:== 代码较多,见书本

Page 52: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙——建立连接

1. 本机作为服务端参与连接的建立 通过 listenUsingRfcommWithServiceRecord(String, UUID) 方法来得到一个BluetoothServerSocket对象,方法中的 String参数代表了本机的名称, UUID是用于蓝牙设备之间相互识别的唯一识别码。

mServerSocket=mAdapter.listenUsingRfcommWithServiceRecord(NAME, UUID);然后通过mServerSocket 的 accept() 方法开始监听连接到这个端口的请求。mServerSocket.accept();

该监听线程会一直阻塞直到有新的请求到来,除非在程序中人为的调用mServerSocket 的 close() 方法。完整代码见书本。

Page 53: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙——建立连接

2. 本机作为客户端参与连接的建立

通过使用 BluetoothDevice 类来得到 BluetoothSocket ,这样将会得到一个用于连接到远程蓝牙设备的 BlueSocket 对象。

mSocket= device.createRfcommSocketToServiceRecord(MY_UUID);

得到了 BluetoothSocket对象后,通过调用它的 connect() 方法,建立起到服务器的一条专用的蓝牙连接。完整代码见书本。

Page 54: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙——实例:手机联系人( contacts )交换的实现

这个程序实现的功能主要是:

1. 将手机内的名片信息(包括姓名,电话,邮箱,备注以及联系人头像等等)备份到手机的 SD卡中;

2. 可以解析由步骤 1 备份生成的备份文件并且导入到手机中;3. 实现不同的手机用户之间相互发送名片信息的功能,支持 wifi 和

蓝牙。

Page 55: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙——实例:手机联系人( contacts )交换的实现

2 发送界面1 启动界面 3 正在连接

实例截图 ( 通过WiFi 发送手机联系人 )

Page 56: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙——实例:手机联系人( contacts )交换的实现

发送文件的业务流程如图:

Androi d设备A Androi d设备B

控制端口A

数据端口B数据端口A

控制端口B①

②发送命令“ SEND+端口号”

③利用接收到的数据端口号建立连接,发送准备好消息

等待准备好②

④发送文件

Page 57: 第八章  Android 网络通信

Android 蓝牙

Android 蓝牙——实例:手机联系人( contacts )交换的实现

发送文件步骤:

① 在 A 设备即发送方的客户端上输入设备 B即接收方的 IP 地址和控制端口B ,建立起到设备 B 的控制连接;

② 通过由第①步所建立的连接发送一条表示“请求发送文件”的命令,其中携带了设备 A 的数据端口 A 的值,同时设备 A 开始监听是否有请求连接到数据端口 A;

③ 设备 B 在接收到设备 A 所发出的消息后,解析该命令的作用,发现是以SEND 开头的“请求发送”命令,获取设备 A 的数据端口,尝试进行连接,若连接成功则发送一条“准备好”的消息;

④ 设备 A 接收到设备 B 所发出的准备好消息,开始通过数据端口连接发送文件,知道发送完成,释放端口。

Page 58: 第八章  Android 网络通信

Android 蓝牙

通过蓝牙发送和接收名片文件

BluetoothServerSocket bss = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);

蓝牙是通过以下的代码得到 BluetoothServerSocket 实例的:

BluetoothSocket bs = device.createRfcommSocketToServiceRecord(MY_UUID);

蓝牙通过如下方式得到 BluetoothSocket 实例:

Page 59: 第八章  Android 网络通信

本章小结

本章主要学习了 Android 平台下的网络通信基础知识,并且通过一组示例说明了如何在实际开发中来使用 Android 网络相关的 API ,着重介绍了WIFI 和蓝牙开发的典型方法。

Page 60: 第八章  Android 网络通信

THE END