1 / 60

第八章 Android 网络通信

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

Download Presentation

第八章 Android 网络通信

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第八章 Android网络通信

  2. 本章主要内容

  3. 网络的重要性 • 网络化信息化的世界 • 短信、电话 • 无线上网 • 移动,自由,随时随地

  4. Android 支持的通信模式 • GSM • EDGE • 3G • …… • WIFI • BLUETOOTH • NFC

  5. Android 网络通信基础 GSM 全球移动通信系统 (Global System for Mobile Communications) 当前应用最为广泛的移动电话标准。全球超过200个国家和地区超过10亿人正在使用GSM电话。

  6. Android 网络通信基础 GSM • GSM标准的广泛使用使得在移动电话运营商之间签署“漫游协定”后用户的国际漫游变得很平常。 • GSM较之它以前的标准最大的不同是他的信令和语音信道都是数字的,因此GSM被看作是第二代(2G)移动电话系统。GSM标准当前由3GPP组织负责制定和维护。

  7. Android 网络通信基础 EDGE 增强型数据速率GSM演进技术 Enhanced Data Rate for GSM Evolution • 从GSM到3G的过渡技术 • 能够充分利用现有的GSM资源 • 弹性优势 • 工作在TDMA和GSM网络 • 提高了GPRS信道编码效率及其高速移动数据标准

  8. Android 网络通信基础 3G 第三代移动通信技术(3rd-generation,3G) 3G就是指IMT-2000(International Mobile Telecommunications-2000),是国际电信联盟(ITU)定义的第三代无线通信的全球标准。 IMT-2000规定移动终端的连接速度: • 以车速移动时 ——144Kbps • 室外静止或步行时——384Kbps • 室内 ——2Mbps

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

  10. Android 网络通信基础 3G——应用 3G目前广泛地运用在: • 宽带上网 • 视频通话 • 手机电视 • 无线搜索 • 手机音乐 • 手机购物 • 手机网游

  11. Android 网络通信基础 WiFi Wireless Fidelity,中文译为“无线兼容认证” • 实质——一种商业认证 • 技术——短程无线传输 • 现状——带WiFi的便携式设备是潮流

  12. Android 网络通信基础 WiFi 常见的WiFi使用形式——无线路由器 • 覆盖范围——70至120米 • 使用场合——公司、家庭、公共场所 • 优点——方便的建立局域网、低成本、使用简单

  13. Android 网络通信基础 WiFi——应用 WiFi相比其他技术有如下一些特点: • 无线电波的覆盖范围广 • 传输速度高 • 使用门槛比较低 • 消除布线的麻烦 • 发射功率低,健康安全

  14. Android 网络通信基础 Bluetooth 定义: 蓝牙的标志 • 开放式无线通讯标准 • 设备短距离互联解决方案 优势: • 无需驱动程序——独特的配置文件 • 小型化无线电 • 低功率、低成本、安全性、稳固 • 易于使用、即时连接

  15. Android 网络通信基础 Bluetooth 蓝牙协议栈: • 核心协议层(HCI、LMP、L2CAP、SDP) • 线缆替换协议层(RFCOMM) • 电话控制协议层(TCS-BIN) • 选用协议层(PPP、TCP、IP、UDP、OBEX、IrMC、WAP、WAE)

  16. Android 网络通信基础 Bluetooth 蓝牙规范(profile)——为了保证蓝牙设备的互通性而制定的一系列规范: • 蓝牙立体声音频传输规范(A2DP) • 基本图像规范(BIP) • 基本打印规范(BPP) • 无线电话规范(CTP) • 蓝牙耳机规范(HP) • 文件传输规范(FTP) • ……

  17. Android 网络通信基础 NFC Near Field Communication(近场通讯) 技术起源: NFC由非接触式射频识别(RFID)及互联互通技术整合演变而来,在单一芯片上结合感应式读卡器、感应式卡片和点对点的功能,能在短距离内与兼容设备进行识别和数据交换。

  18. Android 网络通信基础 NFC 技术优势: • 轻松、安全、迅速的通信 • 传输范围小——独特的信号衰减技术 • 带宽高、能耗低 应用场合: • 门禁、公交 • 手机支付

  19. Android 网络通信基础 Andrion提供的网络接口 Android平台提供了三种网络接口,它们分别是: • java.net.* • org.apache.* • android.net.* 开发人员可以使用这些接口方便的进行Android网络编程。

  20. Android Http通信 Http 简介 Http(Hypertext Transfer Protocol)即超文本传输协议,它是Web的基础协议,是建立在TCP上的一种应用。 Http连接特点: 客户端发送的每次请求都需要服务器返回响应,并在请求结束后释放连接,这个建立连接到关闭连接的过程称为“一次连接”。 由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”、“无状态”的连接。

  21. Android Http通信 Http 的特点 支持客户/服务器模式; 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记; 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。

  22. 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方法传送的数据量较大。

  23. Android Http通信 使用HttpClient接口通信示例 1 初始状态 2 使用GET方法 3 使用POST方法

  24. Android Http通信 使用GET方法请求数据的代码段如下: 使用HttpClient接口通信示例 protectedvoidhttpClientGet() { //GET请求的url,可以看到url中weather的值为chengdu String googleWeatherUrl = "http://www.google.com/ig/api?hl=zh-cn&weather=chengdu"; //DefaultHttpClient,默认的HttpClient类 DefaultHttpClienthttpclient = newDefaultHttpClient(); //HttpGet HttpGethttpget = newHttpGet(googleWeatherUrl); //ResponseHandler,用于处理服务端返回的响应 ResponseHandler<String> responseHandler = newBasicResponseHandler(); 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();//关闭连接 }

  25. Android Http通信 protectedvoidhttpClientPost() { try { // 定义需要获取的内容来源地址 final String SERVER_URL = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather"; // 根据内容来源地址创建一个Http请求 HttpPost request = newHttpPost(SERVER_URL); // 添加参数 List params = newArrayList(); params.add(newBasicNameValuePair("theCityCode", "成都")); params.add(newBasicNameValuePair("theUserID", "")); // 设置参数的编码 request.setEntity(newUrlEncodedFormEntity(params, HTTP.UTF_8)); // 发送请求并获取反馈, 解析返回的内容 HttpResponsehttpResponse = newDefaultHttpClient().execute(request); //如果返回状态码不为404,即URL无误则显示获取的内容 if (httpResponse.getStatusLine().getStatusCode() != 404) { String result = EntityUtils.toString(httpResponse.getEntity()); tv.setText(result.toString()); } }catch (Exception e) { } } 使用HttpClient接口通信示例 使用POST方法请求数据的代码如下:

  26. Android Http通信 使用HttpUrlConnection接口通信示例 • HttpURLConnection继承自URLConnection。要获取HttpURLConnection类的实例,需要使用openConnection()方法来获取,代码如下: String Url = "http://www.google.com/ig/api?weather=chengdu"; URL url = new URL(googleWeatherUrl); HttpURLConnectionhttpconn = (HttpURLConnection) url.openConnection();

  27. Android Http通信 使用HttpUrlConnection接口通信示例 4 初始状态 5 使用GET方法 6 使用POST方法

  28. Android Http通信 使用HttpUrlConnection接口通信示例 HttpURLConnection使用GET方法获取数据的关键代码如下: // 获取HttpURLConnection实例 HttpURLConnectionhttpconn = (HttpURLConnection) url.openConnection(); if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) { Toast.makeText(getApplicationContext(), "连接Google Weather API成功!", Toast.LENGTH_SHORT).show(); // InputStreamReader,用于读取网页内容 InputStreamReaderisr = newInputStreamReader(httpconn.getInputStream(), "utf-8"); inti; String content = ""; // 从流中读取数据 while ((i = isr.read()) != -1) { content = content + (char) i; } isr.close(); //设置TextView tv.setText(content); } //disconnect httpconn.disconnect();

  29. Android Http通信 使用HttpUrlConnection接口通信示例 //使用HttpURLConnection打开连接 HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection(); //因为要求使用Post方式提交数据,需要设置为true urlConn.setDoOutput(true); urlConn.setDoInput(true); //设置以Post方式,注意此处的“POST”必须大写 urlConn.setRequestMethod("POST"); //Post 请求不能使用缓存 urlConn.setUseCaches(false); urlConn.setInstanceFollowRedirects(true); //配置本次连接的Content-Type,配置为application/x-www-form-urlencoded urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //连接,从postUrl.openConnection()至此的配置必须在connect之前完成 //要注意的事connection.getOutputStream会隐含地进行connect。 urlConn.connect(); //DataOutputStream流上传数据 DataOutputStream out=newDataOutputStream(urlConn.getOutputStream()); //要上传的参数 String content="par="+ URLEncoder.encode("POSTTransferData", "gb2312"); //将要上传的内容写入流中 out.writeBytes(content); //刷新,关闭 out.flush(); out.close(); HttpURLConnection使用POST方法请求数据需要改变的主要有两处,一是需要使用setRequestMethod()方法,二是使用DataOutputStream向服务器写入参数值。 代码如下:

  30. Android WiFi 开发 Android SDK提供的相关包:android.net.wifi

  31. Android WiFi 相关类介绍

  32. Android WiFi 相关类介绍

  33. Android WiFi 重要类 Android 操作WiFi的重要类——WifiManager 这个类提供了最主要的用于管理wifi连接的API。 通过调用Context.getSystemService(Context.WIFI_SERVICE) 方法来得到系统提供的WifiManager,代码如下: WifiManagermWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

  34. Android WiFi WifiManager主要用于处理的事务 • 已经配置好的网络连接列表。 • 如果当前有连接存在的话,可以得到当前正处于活动状态的wifi连接的控制权,可以通过它建立或者断开连接,并且可以查询该网络连接的动态信息; • 通过对已经扫描到的接入点的足够信息来进行判断,得出一个最好的接入点进行连接。 • 定义了很多用于系统广播通知的常量,它们分别代表了WiFi状态的改变。

  35. Android WiFi WiFi的开发补充 Android网络连接管理类——ConnectivityManager 该类用于管理抽象意义上的“网络连接” 它完成的主要任务是: • 监控网络连接(包括WiFi,GPRS,UMTS等等); • 当网络连接发生改变时,向系统广播这一改变; • 当失去了当前的网络连接时,尝试切换到另外一个连接; • 提供了允许其他应用程序调用的API让应用程序可以方便地查询当前的网络状态。

  36. 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>

  37. Android WiFi WiFi开发——代码示例 //取得WifiManager对象 mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); //取得WifiInfo对象 mWifiInfo = mWifiManager.getConnectionInfo(); //打开WIFI public void openWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(true); } }

  38. Android WiFi WiFi开发——代码示例 //关闭WIFI publicvoidcloseWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } } //得到WifiLock,以便应用程序保持wifi连接 publicvoidacquireWifiLock() { mWifiLock.acquire(); }

  39. Android WiFi WiFi开发——代码示例 //解锁WifiLock publicvoidreleaseWifiLock() { if (mWifiLock.isHeld()) //判断是否被锁定 { mWifiLock.acquire(); } } //创建WifiLock publicvoidcreatWifiLock() { mWifiLock = WifiManager.createWifiLock("Lock"); }

  40. Android WiFi WiFi开发——代码示例 //得到已经配置好的网络列表 public List<WifiConfiguration> getConfiguration() { returnmWifiConfiguration; } //选择一个已配置好的网络进行连接 publicvoidconnectConfiguration(int index) { //索引大于配置好的网络索引返回 if(index > mWifiConfiguration.size()) { return; } //连接配置好的指定ID的网络 mWifiManager.enableNetwork(mWifiConfiguration.get(index) .networkId, true); }

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

  42. Android 蓝牙 Android 蓝牙API android.bluetooth包括了以下两个接口:

  43. Android 蓝牙 Android 蓝牙API android.bluetooth包括了以下一些类:

  44. Android 蓝牙 Android 蓝牙API

  45. Android 蓝牙 Android 蓝牙API android.bluetooth中用于建立连接的类: 类似于Java API中的ServerSocket和Socket类

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

  47. Android 蓝牙 Android蓝牙示例——TestBluetooth 运行截图: (项目文件保存在/workspace目录,项目名称TestBluetooth) ① ② ③ ④ 程序初始化 打开蓝牙 允许搜索 正在搜索

  48. Android 蓝牙 Android蓝牙示例——TestBluetooth TestBluetooth项目文件结构: 源码包名:com.bluetooth 主Activity:BluetoothActivity 查找蓝牙Activity:DiscoveryActivity 工具类(对话框功能):SamplesUtils 执行查找界面的布局:discovery.xml 主界面布局:main.xml

  49. 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> 接下页

  50. 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-sdkandroid:minSdkVersion="5" /> <!-- 声明需要使用蓝牙的权限 --> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> </manifest>

More Related