Android之网络通信·Web通讯
网络通信1 Web通讯
基于Http的网络连接
Android包中有多重方式实现Http网络连接。如java.net、org.apache.http,原理基本一致。
??? 通过org.apache.http分3步实现网络通讯:
1.派生实例化HttpClient对象,发起和管理所有网络请求。
2.实例化HttpUriRequest接口的子对象,如HttpGet、HttpPost、HttpHeader,用于表示不同类型的Http请求。
3.等待服务器响应,获取HttpResponse对象,进而获取web服务返回的数据和响应信息。
?
??? 开发者需要在请求结束后调用HttpEntity.consumeContent显性释放网络连接的缓冲区内容,表示该请求完成。
?
??? HttpClient发送请求钱,可以通过HttpParams对象调整网络请求参数。
?
联网方式的选择
Android联网并不需要关注设备的具体联网方式,因为Android系统会自动托管对联网方式的管理和选择。
Android支持GPRS、CDMA、Wimax、Wifi等多种联网方式。每种联网模式下,都会有可供选择的连接点Access Point,每个连接点都包含具体的联网设置。依据这些配置,Android可以通过不同的联网方式访问互联网服务。
如果一个连接点在当前环境中可用,可以根据这些配置联网。(可用连接点)系统可以通过任意一个可用连接点连接网络,但不同的连接点意味着不同的连接速度和花费开销。
在Android中,连接点选择的工作封装在底层,网络管理服务会从可用连接点选择一个最好的作为当前连接点,整个系统的所有应用都通过它连接网络,不再需要各个应用分别选择,似的联网变得简单自然。
Android对最好连接点选择是一个静态策略,根据不同联网方式的先验知识作出判断,不是根据当前实际的联网速度选择。在该策略下,优先选择Wifi;如果所有Wifi不可用,则依次选择3G网络、EDGD网络、GPRS网络。
Android会时刻关注连接点的可用性,一旦当前连接点变成不可用状态,会立刻切换。使用最新的最优的可用连接点;与之类似,如果出现了高优先级的连接点,Android也会切换。
??? 代码中,通过ConnectivityManager查看和管理当前的联网方式。ConnectivityManager.getActiveNetworkInfo获得当前联网方式;
?
??? 与通信网络相关的连接点信息存储在连接点数据源中,通过查询该数据源可用获得连接点相关的代理信息。
?
Wifi管理
Wifi的联网优先级最高,联网速度快,流量价格低。用户身边的Wifi连接点可能不停的变换,需要不断检测和调整,才能保证充分利用Wifi连接网络。
??? WifiManager管理和获取Wifi连接的信息。WifiManager.startScan搜索周边可用的Wifi,扫描完成后通过广播事件通知监听者,Android调用WifiManager.getScanResults获取扫描结果。
?
?
WifiManager.getConfiguredNetwork获取所有可用的连接点