- 技术文章
- OPhone 2.0数据连接管理
OPhone 2.0数据连接管理
OPhone平台开发, 2011-02-24 14:11:00
标签 : 数据 2.0 OPhone 连接 管理
在连接互联网前,终端必须打开数据连接,建立终端与网络的数据通道。OPhone平台提供了多个APN并发连接的能力,可以使各个应用同时访问不同的APN。例如用户可以使用浏览器通过CMNET访问浏览10086门户网站,同时音乐随身听客户端在后台可以通过CMWAP连接音乐平台,进行在线听歌。
OPhone平台提供了ConnectivityManager类来管理数据连接,通过ConnectivityManager提供的接口,程序可以打开/关闭指定类型的数据连接,监听数据连接状态的变化。下面我们将详细介绍ConnectivityManager类提供的接口,以及如何通过这些接口来管理数据连接。
ConnectivityManager的常用方法:
使用ConnectivityManager前,必须在Manifest文件中声明相应的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
1. 获取ConnectivityManager类的句柄
调用Context.getSystemService(Context.CONNECTIVITY_SERVICE) 获取句柄
2. NetworkInfo[] getAllNetworkInfo() :获取当前的数据连接状态
3. int startUsingNetworkFeature(int networkType, String feature) :打开数据连接
参数:
networkType:指定数据连接的类型,可选值为ConnectivityManager.TYPE_WIFI, ConnectivityManager.TYPE_MOBILE
feature: 指明APN类型,("wap"代表CMWAP, "net"代表CMNET)
返回值:
Phone.APN_ALREADY_ACTIVE( 0) : 数据连接已经建立,程序可以立刻进行网络通信。
Phone.APN_REQUEST_STARTED ( 1): 数据连接请求发出,开始建立连接,程序需要监听数据连接状态,判断数据连接是否建立成功。
其他值: 数据连接建立失败。
4. int stopUsingNetworkFeature(int networkType, String feature) :关闭数据连接。当没有任何程序在使用指定的APN时,系统才会真正关闭该APN连接,否则只是将这个APN的引用计数减1。
参数:
networkType:指定数据连接的类型,可选值为ConnectivityManager.TYPE_WIFI, ConnectivityManager.TYPE_MOBILE
feature: 指明APN类型,("wap"代表CMWAP, "net"代表CMNET)
返回值:-1表示调用失败
5. 监听数据连接状态变化
监听数据连接的状态变化,需要注册监听Intent:ConnectivityManager.CONNECTIVITY_ACTION,通过分析Intent中携带的NetworkInfo信息,可以获得当前的数据连接状, 具体的参数可以参考OPhone SDK文档。
运行项目chapter9_5, 点击按钮打开或关闭CMWAP连接。当程序监听到数据连接状态改变的时候,通过Toast的形式,通知用户。
.jpg)
图9-8 打开、关闭CMWAP
package com.ophone.chapter9_5;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class APNActivity extends Activity {
private ConnectivityBroadcastReceiver mReceiver;
private NetworkInfo mNetworkInfo;
private ConnectivityManager mCM;
private Button start;
private Button stop;
private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
return;
}
// 获取网络信息
mNetworkInfo = (NetworkInfo) intent
.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
// 获取网络连接失败的原因
String reason = intent
.getStringExtra(ConnectivityManager.EXTRA_REASON);
// 是否是自动切换网络
boolean isFailover = intent.getBooleanExtra(
ConnectivityManager.EXTRA_IS_FAILOVER, false);
if (TextUtils.equals(mNetworkInfo.getApType(), "wap")) {
if (mNetworkInfo.getState() == NetworkInfo.State.CONNECTED) {
Socket.setInterface(mNetworkInfo.getInterfaceName());
Toast.makeText(APNActivity.this, "CMWAP OPENED",
Toast.LENGTH_SHORT).show();
} else if (mNetworkInfo.getState() == NetworkInfo.State.DISCONNECTED) {
Toast.makeText(APNActivity.this, "CMWAP CLOSED",
Toast.LENGTH_SHORT).show();
}
}
};
}
// 注册监听数据连接状态
public void registerDataConnectionIntent(Context ctx) {
mReceiver = new ConnectivityBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
ctx.registerReceiver(mReceiver, filter);
}
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mCM
= (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
registerDataConnectionIntent(this);
//初始化start
start = (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
mCM.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "wap");
}
});
//初始化stop
stop = (Button) findViewById(R.id.stop);
stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
mCM.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "wap");
}
});
}
}
(声明:本网的新闻及文章版权均属OPhone SDN网站所有,如需转载请与我们编辑团队联系。任何媒体、网站或个人未经本网书面协议授权,不得进行任何形式的转载。已经取得本网协议授权的媒体、网站,在转载使用时请注明稿件来源。)



所有评论(10)
guolw 1年前
学习了!
Tanck 1年前
我正在搞一个关于信息备份的东西!这个说明让我受益匪浅啊!
eqiang8271 282天前
OPhone建议使用apache DefaultHttpClient 完成http请求。
eqiang8271 282天前
http://blog.csdn.net/eqiang8271/article/details/6672708
DefaultHttpClient sample code.
anjxue 253天前
我真是太感谢您了,解决了我很大的困惑,我一会试一下。
再次表示感谢!
flower 223天前
好!
tujh 217天前
很好的教程
jw72jw 184天前
很好的教程
对数据库
Java18 150天前
学习了
Wesley.S 77天前
这个不错,以前没有注意啊