Android开发实验报告-网络与通信_第1页
Android开发实验报告-网络与通信_第2页
Android开发实验报告-网络与通信_第3页
Android开发实验报告-网络与通信_第4页
Android开发实验报告-网络与通信_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验七 网络与通信一 实验目的掌握无线网络通信原理,熟练Android平台网络应用开发二 实验内容1) 熟悉Android平台上网络与通信的开发技术,包括WiFi开发基础、蓝牙开发;2) 编程实现简易浏览器、WiFi管理器、蓝牙服务器和客户端。三 仪器设备1) PC机最低配置:2G Hz以上双核CPU,2G以上内存,1G自由硬盘空间;2) WindowsXP(32位)或Vista(32或64位)或Windows7(32或64位);3) Eclipse 3.7以上;4) Eclipse JDT 插件;5) JDK 5或JDK 6;6) Android Development Tools插件;7)

2、 Android SDK。四 实验要求1) 了解网络通信技术基本原理;2) 学习实现HTTP通信、Socket通信;3) 用WebKit实现一个浏览器;4) 熟练WiFi、蓝牙相关的类和接口。五 实验主要步骤 1. 无线网络技术、Android网络基础 所谓无线网络,既采用无线传输媒介(如无线电波、红外线等)的网络。既包括允许用户建立远距离无线连接的全球语音和数据网络,也包括为近距离无线连接进行优化和红外线技术及射频技术。无线网络与有线网络的用途十分类似,最大的不同在于传输媒介的不同,利用无线电技术取代网线。无线网络可以和有线网络互为备份。无线技术的分类如下:1.无线网络通信标准2无线网络类型

3、3无线局域网(WLAN)4无线个域网(WPAN) Android基于Linux内核,它包含一组优秀的联网功能,当然这些只是Android自带的一些功能,它们是开源软件,大家可以拿来学习研究。目前,Android平台有3种网络接口可以使用,它们分别是:.*(标准java接口)、org.apache(Apache接口)、.*(android网络接口)。下面我们分别来简单介绍一下这些接口的功能及其作用。标准java接口.*(标准java接口)提供与联网有关的类,包括流和数据包套接字、Internet协议、常见HTTP处理。比如:追寻URL以及URLConnection/Http URLConnect

4、ion对象、设置连接参数、连接到服务器、向服务器写数据、从服务器读取数据等通信。下面是常见的使用包的HTTP例子,如代码清单8-1所示。Apache接口HTTP协议可能是现在Internet上使用得最多、最重要的通信协议了,二元越来越多的java应用程序需要通过HTTP协议来访问网络资源。虽然在JDK的包中已经提供了访问HTTP协议的基本功能,但是对于大部分应用程序来说,JDK库本身提供的功能远远不够。这里就需要Android提供的Apache HttpClient了。它是一个开源项目,功能更加完善,为客户端的HTTP编程提供高效、最新、功能丰富的工具包支持。Android平台引入了Apach

5、e HttpClient的同时不提供了对它的一些封装和扩展,例如设置缺省的HTTP超时和缓存大小等。Android使用的是目前最新的HttpClient 4.0(org.apache.http.*),可以将Apache视为目前流行的开源Web服务器,主要包括创建HttpClient以及Get/Post、HttpRequest等对象,设置连接参数,执行HTTP操作,处理服务器返回结果等功能。下面是一个使用.http.*包的例子,如代码清单8-2所示。Android网络接口A.*包实际上是通过对Apache中的HttpClient的封装来实现的一个HTTP编程接口,同时还提供了HTTP请求队列管理

6、nyeyHTTP连接池管理,以提高并发请求情况下(如转载网页时)的处理效率,除此之外还有网络状态监视等接口、网络访问的Socket、常用的Uri类以及有关WiFi相关的类等等。下面我们看最简单的Socket连接。2. HttpURLConnection接口、HttpClient接口HTTP(Hyper Text Transfer Protocol,超文本传输协议)用于传送WWW方式的数据。HTTP协议采用了请求/响应模型。客户端向服务器发送一个,请求头包含了请求的方法、URL、协议版本,以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。HTTP通信中使用最多的就是get和post,

7、get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给服务器。Post与Get的不同之处在于Post的参数不是放在URL字串里面,而是放在http请求数据中。HttpURLConnection是java的标准类,继承自URLConnection类,URLConnection与HttpURLConnection都是抽象类,无法直接实例化对象。我们分别使用Get和Post方式来获取一个网页内容。首先,我们在服务器上建立一个http1.jsp文件代码如下:再创建一个使用Get和Post来传递参数的网页httpget.jsp,代码如下:下面我们通过一个Android程序分别以不同的方式访问

8、这两个页面,程序运行结果如下: 首先,我们为看看访问不需要传递参数的网页如何实现。非常简单!只需要打开一个HttpURLConnection连接,然后取得流中的数据,完成之后关闭这个连接,代码如下:/直接获取数据public class Activity02 extends Activityprivate final String DEBUG_TAG = "Activity02" /* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceS

9、tate)super.onCreate(savedInstanceState);setContentView(R.layout.http);TextView mTextView = (TextView)this.findViewById(R.id.TextView_HTTP);/http地址String httpUrl = "10:8080/http1.jsp"/获得的数据String resultData = ""URL url = null;try/构造一个URL对象url = new URL(httpUrl); c

10、atch (MalformedURLException e)Log.e(DEBUG_TAG, "MalformedURLException");if (url != null)try/使用HttpURLConnection打开连接HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();/得到读取的内容(流)InputStreamReader in = new InputStreamReader(urlConn.getInputStream();/ 为输出创建BufferedReaderBuff

11、eredReader buffer = new BufferedReader(in);String inputLine = null;/使用循环来读取获得的数据while (inputLine = buffer.readLine() != null)/我们在每一行后面加上一个"n"来换行resultData += inputLine + "n"InputStreamReaderin.close();/关闭http连接urlConn.disconnect();/设置显示取得的内容if ( resultData != null )mTextView.setT

12、ext(resultData);else mTextView.setText("读取的内容为NULL");catch (IOException e)Log.e(DEBUG_TAG, "IOException");elseLog.e(DEBUG_TAG, "Url NULL");/设置按键事件监听Button button_Back = (Button) findViewById(R.id.Button_Back);/* 监听button的事件信息 */button_Back.setOnClickListener(new Button.

13、OnClickListener() public void onClick(View v)/* 新建一个Intent对象 */Intent intent = new Intent();/* 指定intent要启动的类 */intent.setClass(Activity02.this, Activity01.class);/* 启动一个新的Activity */startActivity(intent);/* 关闭当前的Activity */Activity02.this.finish(););以Get方式传递参数也很简单,对于Activity02.java只需要修改网页地址,加上要传递的参数

14、即可。代码如下(其中,“?par=abcdefg”则是我们传递的参数par)。上面都只是简单地进行了网络的访问,但是在实际开发中,可能会运用到更复杂的联网操作。Apache提供了HttpClient,它对中的类做了封装和抽象,更适合我们在Android上开发联网应用。要使用HttpClient,需要了解一些类。DefaultHttpClient是默认的一个HTTP客户端,我们可以使用它创建一个HTTP连接。HttpResponse是一个HTTP连接响应,当执行一个HTTP连接后,就会返回一个HttpResponse,可以通过HttpResponse获得一些响应的信息。下面是请求一个HTTP连接

15、并获得该请求是否成功的代码。通过上面几个类的了解,下面我们将分别使用Get和Post方式请求一个网页程序运行截图如下:相关代码如下:import java.io.IOException;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.Http

16、Get;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;public class Activity02 extends Act

17、ivity/* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.http);TextView mTextView = (TextView) this.findViewById(R.id.TextView_HTTP);/ http地址String httpUrl = "10:8080/h

18、ttpget.jsp?par=HttpClient_android_Get"/HttpGet连接对象HttpGet httpRequest = new HttpGet(httpUrl);try/取得HttpClient对象HttpClient httpclient = new DefaultHttpClient();/请求HttpClient,取得HttpResponseHttpResponse httpResponse = httpclient.execute(httpRequest);/请求成功if (httpResponse.getStatusLine().getStatusC

19、ode() = HttpStatus.SC_OK)/取得返回的字符串String strResult = EntityUtils.toString(httpResponse.getEntity();mTextView.setText(strResult);elsemTextView.setText("请求错误!");catch (ClientProtocolException e)mTextView.setText(e.getMessage().toString();catch (IOException e)mTextView.setText(e.getMessage().

20、toString();catch (Exception e)mTextView.setText(e.getMessage().toString(); /设置按键事件监听Button button_Back = (Button) findViewById(R.id.Button_Back);/* 监听button的事件信息 */button_Back.setOnClickListener(new Button.OnClickListener() public void onClick(View v)/* 新建一个Intent对象 */Intent intent = new Intent();/*

21、 指定intent要启动的类 */intent.setClass(Activity02.this, Activity01.class);/* 启动一个新的Activity */startActivity(intent);/* 关闭当前的Activity */Activity02.this.finish(););3. Socket传输模式、Socket编程原理Socket通常也称做“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。它是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进

22、行网络通信必需的5种信息:连接使用的协议、本地主机的IP地址、本地进程的协议、本地进程的协议端口、远地主机的IP地址和远地进程的协议端口。Socket传输模式Socket两种主要的操作方式:面向连接的和无连接的。面向连接的Socket操作就像一部电话,必须建立一个连接和一个呼叫。所有的事情到达时的顺序与它们出发时的顺序是一样的。无连接的Socket操作就像一个邮件投递,没有什么保证,多个邮件到达时的顺序可能与出发时的顺序不一样的。到底用哪种模式是由应用程序的需要决定的。如果可靠性更重要的话,用面向连接的操作会好一些。比如文件服务器需要数据的正确性和有序性,如果一些数据丢失了,系统的有效性将会失

23、去。一些服务器,比如间歇性发送一些数据块,如果数据丢了的话,服务器并不想要再重新发一次,因为数据到达的时候,它可能已经过时了。确保数据的有序性和正确性需要额外的操作,这会带来内存消耗,额外的费用将会降低系统的回应速率。Socketxytk编程原理Java在包中提供两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封闭得非常好的类,使用很方便。其构造方法如下:其中,address、host和port分别是双向连接中另一方的IP地址、主机名和端口号,stream指明Socket是流Socket不是数据报Socket,localPort表示本地主机的端口号,

24、localAddr和bindAddr是本地机器的地址(ServerSocket的主机地址),impl是Socket的父类,既可以用来创建ServerSocket,又可能用来创建Socket。Count则表示服务端所能支持的最大连接数。要想使用Socket来与一个服务器通信,就必须先在客户端创建一个Socket,并指出需要连接的服务器的IP地址和端口,这也是使用Socket通信的第一步,代码如下通过以上程序我们创建一个ServerSocket在端口543231监听客户请求,它是Server的典型工作模式,在这里Server只能接收一个请求,接收后Server就退出了。,一旦有客户请求,Serve

25、r问题会创建一个服务线程来服务新来的客户,而自己继续监听。程序中accept()是一个阻塞函数,所谓阻塞性方法就是说该方法被调用 后将等待客户的请求,直到有一个客户启动并请求连接到相同的端口,然后accept()返回一个对应于客户的Socket。这时,客户方和服务方都建立了用于通信的Socket,接下来就是由各个Socket分别打开各自的输入、输出流。Socket提供了方法getInputStream()和getOutStream()来得到对应的输入(出)流以进行读(写操作,这两个方法分别返回InputStream和OutputStream类对象。为了便于读(写)数据,我们可以在返回的输入/输

26、出流对象上建立过滤流,如DataInputStream、DataOutputStream或PrintStream类对象,对于文本方式流对象可以采用InputStreamReader和OutputStreamWriter、PrintWriter等处理。代码如下关闭Socket和流。每一个Socket存在时都将占用一定的资源,在Socket对象使用完毕时,要使其关闭,关闭Socket可以调用Socket的close()方法。在关闭Socket之前,应将与Socket相关的所有输入(出)流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出应首先关闭,然后再关闭So

27、cket。尽管Java有自动回收机制,网络资源最终是会被释放的,但是为了有效利用资源,建议读者按照合理的顺序主动释放资源。os.close();is.close();socket.close();在Android中完全可以使用Java标准API来开发网络应用,下面我们将实现一个服务器和客户端通信,客户端发送数据并接收服务器发回的数据。相关代码如下:package com.yarin.android.Examples_08_04;/package com.yarin.android.Examples_08_04;import java.io.BufferedReader;import java.

28、io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import .ServerSocket;import .Socket;public class Server implements Runnablepublic void run()try/创建ServerSocketServerSocket serverSocket = new ServerSocket(54321);while (true)/接受客户端请求Socket

29、 client = serverSocket.accept();System.out.println("accept");try/接收客户端消息BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream();String str = in.readLine();System.out.println("read:" + str);/向服务器发送消息PrintWriter out = new PrintWriter( new BufferedWriter

30、( new OutputStreamWriter(client.getOutputStream(),true); out.println("server message"); /关闭流out.close();in.close();catch (Exception e)System.out.println(e.getMessage();e.printStackTrace();finally/关闭client.close();System.out.println("close");catch (Exception e)System.out.println(e

31、.getMessage();/main函数,开启服务器public static void main(String a)Thread desktopServerThread = new Thread(new Server();desktopServerThread.start();4. 网络通信的中文乱码问题在实际开发过程中,可能经常会遇到中文显示乱码的问题,那么这空间是为什么呢?要想解决Java中文乱码问题,首先需要了解字符、字符集、编码的概念以及常用的编码方式。字符:是文字与符号的总称,包括文字、图形符号、数学符号等。字符集:就是一组抽象字符的集合。字符集常常和一种具体的语言文字对应起来,

32、该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集、繁体汉字字符集、日文字符集等等。字符编码:计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码。要制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。根据字符集内字符的多少,确定用几个字节来编码。ASC编码是目前计算机中用得最广泛的字符集及其编码。ISO-8859-1可以表示的是西欧语言,它看起来很单一,为什么还在使用呢?由于是单字节编码,与计算机最基础的表示单位一一致,所以很多时候,仍旧使用ISO-8859-1编码来表示,而且在很多协议上默认使用该编码。Unicod

33、e编码(统一码、万国码、单一码)是一种在计算机上使用的字符编码,通常我们所遇到的UTF-8就是Unicode编码的实现方式。GB2312字集是简体字集;BIG5字集是台湾繁体字集;GBK字集是简繁字集,包括了GB字集、BIG5字集和一些符号。GB18030是国家制定的一个强制性大字集标准,它的推出使汉字集有了统一的标准。Linux系统默认使用的是ISO-8859-1编码,Win32系统默认使用的是GB2312编码。网络通信中,产生乱码的原因主要是通信过程中使用了不同的编码方式:服务器中的编码方式,传输过程中的编码方式,传输到达终端设备的编码方式。因此在传输过程中就需要至少两次编码转换:首先从服

34、务器编码转换为网络编码,再从网络编码转换为终端设备编码。在转换过程中发生任何情况都可能引起编码混乱,一般情况下我们可以通过以下两种方式来避免这个问题。一个方式是:由于大部分终端设备都支持Unicode字符集,所以在连接网页时,我们希望网页数据在网络传输时使用UTF-8方式传输,这样就可以很简单地将UTF-8转换成Unicode字符集了。下面我们将通信过程中得到的流先转换为字节,然后再将字节按GB2312的方式进行转换得到字符串,代码如下:InputStream is=conn.getInprtStream();BufferedInputStream bis=new BufferedInputS

35、tream(is);byte bytearray=new byte1024;int current=-1;int i=0;while(current=bis.read()!=-1)bytearrayi=(byte)current;i+;resultData=new String(bytearray,"GB2312");因此,通过上面的转换,“resultData”字符串便可以显示中文效果了。另一种方式是在数据传递过程中使用ISO-8859-1字符集,这样就是直接使用ASC编码方式,当然在传递到终端设备时,需要将其数据反转才能够正常显示。下面我们将一个字符串按ISO-8859

36、-1字符集进行转换,代码如下:public static String FormatStr(String str)if(str=null|str.length()=0)return " "tryreturn new String(str.getBytes("ISO-8859-1"),"bgk");catch (UnsupportedEncodingException ex)return str;归根结底,解决中文乱码只需要两个步骤:使用getBytes(“编码方式”);来对汉字进行重编码,得到它的字节数组。再使用new String(

37、Bytes,“解码方式”);来对字节数组进行相应的编码。只要理解了编码和解码的含义,并掌握了什么时候应该编码,什么时候应该解码,怎么编码及怎么解码,就不再害怕中文乱码问题了。6. WebView控件和JavascriptWebKit是一个开源浏览器网页排版引擎,与之相应的引擎有Gecko(Mozilla、Firefox等使用的排版引擎)和Trident(也称为MSHTML,是IE使用的排版引擎)。同时,WebKit也是苹果Mac OS X系统引擎框架版本的名称,主要用于Safari、Dashboard、Mail和其他一些Mac OS X程序。WebKit所包含的WebCore排版引擎和JSCo

38、re引擎来自于KDE的KHTML和KJS,当年苹果比较了Gecko和KHTML后,仍然选择了后者,就因为它拥有清晰的源码结构、极快的渲染速度。而今Android系统也毫不犹豫地选择了WebKit。它具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等。可以看出这是一个非常强大的Web应用平台。WebKit由3个模块组成:JavaScriptCore、WebCore和WebKit,其结构图如。对WebKit各个模块的功能有了了解,下面我们看看WebKit的解析过程是怎样的。流程如下:而Google对WebKit进行了封装,为开发者提供了丰富的Java接口,其

39、中最重要的便是android. WebKit.WebView控件。下面我们重点学习WebView控件的使用。Android提供了WebView控件专门用来浏览网页,和其他控件一样,它使用起来非常简单。首先我们需要在XML布局文件中定义一个WebView控件,代码如下:<WebViewandroid:id="+id/WebView01"android:layout_width="fill_parent"android:layout_height="fill_parent"andriod:layout_weight="1&

40、quot;/>然后在程序中装载这个控件,设置其属性,比如:颜色、字体、要文章的网址等(当然也可以全部在XML中定义),下面的代码通过loadUrl方法设置了当前WebView需要访问的网址:mWebView=(WebView)findViewById(R.id.WebView01);mWebView.loadUrl("");在Android中专门通过WebSettings来设置WebView的一些属性、状态等。在创建WebView时,系统有一个默认的设置,我们可以通过WebView.getSettings来得到设置。代码如下:WebSettings webSettin

41、gs=mWebView.getSettings();WebSettings和WebView都在同一个生命周期中存在,当WebView被销毁后,如果再使用WebSettings则会抛出IllegalStateException异常。下面是设置一些常用属性、状态的方法如下:将表中的大部分方法中的set改为get,即可得到WebView的一些状态和属性。方法太多了,这里我们仅列举了一些常用的方法,大家可以参见官方API。这样就可以浏览网页了,但是通过调用系统浏览器来完成的。那么如何才能在应用程序中自定义网页浏览程序呢?可以使用WebViewClient来完成这个功能。WebViewClient就是专

42、门辅助WebView处理各种通知、请求等事件的类。我们可以通过WebView的setWebViewClient方法来指定一个WebViewClient对象。WebViewClient提供了如表8-3所示的一些方法,我们可以覆盖这些方法来辅助WebView浏览网页,代码如下(我们设置覆盖shouldOverrideUrlLoading方法,使得当有新连接时,使用当前的WebView来显示):通过WebViewClient可以浏览网页的大部分内容了,但是现在很多网页中使用了Javascript脚本语言,比如用Javascript实现的对话框,这时我们如何处理这些对话框呢?Android中还提供了一

43、个重要的类WebChromeClient,专门用来辅助WebView处理Javascript的对话框、网站图标、网站Title、加载进度等。WebChromeClient中的方法不是很多,其功能如表8-4所示。下面我们来实现onRevervedTitle方法,用于更改应用程序的Title,代码如下:WebView不但可以运行一段HTML代码,而且还有一个最重要的特点,就是WebView可以同Javascript相互调用。有了它我们就可以用HTML和Javascript来编写Android应用。下面我们通过一个例子来学习WebView如何和Javascript互相调用,该例子将实现从Androi

44、d应用中调出个人资料,然后通过Javascript显示出来。首先在Android中定义一个PersonaData类,用来保存个人资料,并且定义得到这些数据的成员函数,供Javascript调用。首先看看运行效果,如图这里需要通过addJavascriptInterface(Object obj,String inter faceName)方法将一个Java对象绑定到一个Javascript对象中,Javascript对象名就是interfaceName,作用域是Global,这样便可以扩展Javascript的API,获取Android的数据。代码如下ackage com.yarin.andr

45、oid.Examples_08_07;import android.app.Activity;import android.os.Bundle;import android.webkit.WebView;public class Activity01 extends Activityprivate WebView mWebView;private PersonalData mPersonalData;/* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceS

46、tate)super.onCreate(savedInstanceState);setContentView(R.layout.main);mPersonalData = new PersonalData();mWebView = (WebView)this.findViewById(R.id.WebView01);/设置支持JavaScriptmWebView.getSettings().setJavaScriptEnabled(true);/把本类的一个实例添加到js的全局对象window中, /这样就可以使用window.PersonalData来调用它的方法mWebView.addJa

47、vascriptInterface(this, "PersonalData");/加载网页mWebView.loadUrl("file:/android_asset/PersonalData.html");/在js脚本中调用得到PersonalData对象public PersonalData getPersonalData()return mPersonalData;/js脚本中调用显示的资料class PersonalData/js脚本中调用显示的资料class PersonalDataString mID;String mName;String m

48、Age;String mBlog;public PersonalData()this.mID="123456789"this.mName="Android"this.mAge="100"this.mBlog=""public String getID()return mID;public String getName()return mName;public String getAge()return mAge;public String getBlog()return mBlog;6. ScanResult、Wi

49、fiConfiguration、WifiInfo、WifiManager、WifiLockWiFi全称Wireless Fidelity,又称802.11b标准,它的最大优点就是传输速度较高,可以达到11Mbps;另外它的有效距离也很长,同时了与已有的各种802.11DSSS设备兼容。WiFi是一个无线网络通信技术的品牌,由Wi-Fi联盟(Wi-Fi Alliance)拥有,目前是改善IEEE 802.11标准的无线网络产品之间的互通性。Wi-Fi联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance(WECA),2002年10月正

50、式改名为Wi-Fi Alliance。由于WiFi的频段在世界范围内是无需任何电信运营执照的免费频段,因此WLAN无线设备提供了一个世界范围内可用的、费用极其低廉且数据带宽极高的无线的空中接口。用户可以在WiFi覆盖区域内快速浏览网页,随时随地接听、拨打电话。而其他一些WLAN的宽带数据应用,如流媒体、网络游戏等功能更是值得用户期待。有了WiFi功能,我们打长途电话(凶手国际长途)、浏览网页、收发电子邮件、音乐下载、数码照片传递等,再也无需担心速度慢和花费高的问题。现在WiFi在国内的覆盖范围越来越广泛高级宾馆、豪华住宅区、飞机场以及咖啡厅的场所都有了WiFi接口。当我们去旅游、办公时,就可以

51、在这些场所使用我们的掌上设备尽情网上冲浪了。T-Mobile G1自带了Wi-Fi无线网上,可以在功能表中找到Settings设置图标,进入后选择Wireless controls(无线控制),其中就是WiFi的设置项。Android也提供了android.wifi包供我们操作,WiFi应用程序接口为应用程序和底层无线栈交流提供途径,而底层无线栈又为WiFi提供接入点。基本上来自请求端的信息都是可见的,包括已经连接网络的连接速度、IP地址、完成状态和更多的信息,比如:可以到达的其他网络的信息,应用程序接口的特性(包括扫描、添加、保存、终止和开始与WiFi的连接),当然由于WiFi和硬件设备以及

52、驱动等有关,主要包括以下几个类和接口要管理WiFi连接,首先来看看WiFiManager如何使用。中下代码来WiFiManager对象:wifiManager wifiManager=(WifiManager)getSystemService(Context.WIFI-SERVICE);得到了这个对象,现在可以使用这个对象来WiFi连接。下面我们看看可以进行什么样的操作,WiFiManager的常用方法如表7. 蓝牙功能包,学习SMS消息的发送和接受。具体来说,“蓝牙”是一种短距离的无线连接技术标准的代称,蓝牙的实质内容就是要建立通用的无线电空中接口及其控制软件的公开标准。“蓝牙”计划主要面向

53、网络中各类数据及语音设备,如PC机,笔记本电脑、打印机、传真机、数码相机、移动电话、家电设备等,使用无线微波的方式将它们连成一个微微网,多个微微网之间也可以互连,从而方便快速地实现各类设备之间的通信。蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4Ghz ISM(即工业、科学、医学)频段,其数据速率为1Mbps,采用时分双工传输方案实现全双工传输。有关蓝牙的类和接口位于android.bluetooth包中,首先我们看看蓝牙包中提供了哪些功能,如表8-6所示。这些蓝牙API允许应用程序连接和断开蓝牙耳机、扫描仪和其他蓝牙设备,包括编写和修改本地服务的SDP协议数据库和查询其他蓝牙设备上的SDP协议数据库,在Android上建立RFCOMM协议的连接并连接到其他指定设备上。 下面我们依然通过一个示例来学习Android上的蓝牙包的使用,程序运行结果如图每一个按钮代表了一个不同的蓝牙功能,下面我们就一一来学习这些功能。具体源代码请参见本书所附代码:第8章Examples_08_09。 首先,我们要使用蓝牙API,并且

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论