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的形式,通知用户。

  图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

    guolw 1年前

    学习了!

  • Tanck

    Tanck 1年前

    我正在搞一个关于信息备份的东西!这个说明让我受益匪浅啊!

  • eqiang8271

    eqiang8271 282天前

    OPhone建议使用apache DefaultHttpClient 完成http请求。

  • eqiang8271

    eqiang8271 282天前

    http://blog.csdn.net/eqiang8271/article/details/6672708

    DefaultHttpClient sample code.

  • anjxue

    anjxue 253天前

    我真是太感谢您了,解决了我很大的困惑,我一会试一下。
    再次表示感谢!

  • flower

    flower 223天前

    好!

  • tujh

    tujh 217天前

    很好的教程

  • jw72jw

    jw72jw 184天前

    很好的教程

    对数据库

  • Java18

    Java18 150天前

    学习了

  • Wesley.S

    Wesley.S 77天前

    这个不错,以前没有注意啊

发表评论

要发表评论,您需要先登录  [ 登录 ]
有奖征文

RSS订阅