OPHONE联网详解

 

在移动游戏基地调试了2天,终于明白了OPHONE联网是咋回事了,不敢独享,贴出来给后来的朋友们。

 

先从OPHONE的联网机制开始说起。

 

OPHONE联网,具体分两步, 第一步是启动联网,就跟普通手机启动GPRS一样,只是OPHONE改成了程序可以控制启动和关闭,GPRS则是系统根据程序需求自动连接的。

 

进入OPHONE系统,设置-》数据连接,  就能看到一个选择框,“开机时连接”, 如果这个已经钩上,则表明,第一步系统已经给你做了,只是默认连接时CMNET, 我测试的MOTO MT710是这样的。  如果这个钩没有钩上,则需要你的联网应用在程序内启动数据连接。 具体的代码如下:

 

启动数据连接        注意下面的参数  networkmode, 这个就是你在OPHONE数据连接设置里看到的,比如internet, cms,wap,等等,你自己建的也可以,根据名字来就行

public boolean ActiveNetWorkByMode(String networkmode) {

        try
        {
            Context context = getApplicationContext();

            ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

            connectivity.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, networkmode);
           
            return isNetworkCMWAPAvailable();
           
        }
        catch(Exception e)
        {
           
        }
        return false;
          

    }

//关闭数据连接
    public boolean DestroyNetWorkByMode(String networkmode) {

        try
        {
            Context context = getApplicationContext();

            ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

            connectivity.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, networkmode);
           
            return isNetworkCMWAPAvailable();
           
        }
        catch(Exception e)
        {
           
        }
        return false;
          

    }

 

 

//判断数据连接是否激活,如果激活则进一步判断是不是CMWAP连接,我的联网只用CMWAP,你可以根据自己的需要具体去改写。

public boolean isNetworkCMWAPAvailable() {

           Context context = getApplicationContext();

           ConnectivityManager connectivity = (ConnectivityManager) context

           .getSystemService(Context.CONNECTIVITY_SERVICE);
          
           //System.out.println("NETWORK active connectivity     ");

           if (connectivity != null) {

             NetworkInfo[] info = connectivity.getAllNetworkInfo();

             if (info != null) {
                 //System.out.println("NETWORK active info is well     ");
               for (int i = 0; i < info.length; i++) {
                 String typeName = info[i].getTypeName();
                 String extraInfo = info[i].getExtraInfo();
                 
                 //System.out.println("NETWORK active info state      "  + info[i].getState() + "   "  + typeName + "   " + extraInfo);
                 if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                     
                     //System.out.println("NETWORK CONNECTED     " + extraInfo);
                            String subType = info[i].getSubtypeName();
                            if ( extraInfo!=null && extraInfo.contains("cmwap") ) {
                                //System.out.println("NETWORK CONNECTED SHUTDOWN    " + extraInfo);
                                //connectivity.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "wap");
                                 
                                return true;
                            }

               }

             }

            }

           }

          return false;

        }

 

 

以上就是第一步,先判断数据连接是否激活,没有激活则代码激活之。另外,激活的过程大概需要3到5秒,所以激活调用后,立即去判断是否激活,返回的结果肯定是FALSE,如果等个10再去调用判断,则会显示成功,所以建议激活不要和联网放在一起,我一般是启动游戏,激活,关闭游戏时同时关掉激活。

 

第二步,就是联网,

 

联网方式最好不要用传统的联网,我一开始就是传统的,比如。

 

CMNET

 private int CountMoney(String urlstr)
  {
     
     
      String strHead = "";
      try{
            URL url = new URL(urlstr);
          URLConnection conn = url.openConnection();
         
          String headerstr = conn.getHeaderField("Content-Type");
           
          if (headerstr!= null && headerstr.startsWith("text")) {
              conn = url.openConnection();
          }
         
          InputStream inputstream = conn.getInputStream();
          ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
          byte abyte1[] = new byte[1024];
          for(int k = 0; -1 != (k = inputstream.read(abyte1));)
              bytearrayoutputstream.write(abyte1, 0, k);
          
          strHead = new String(bytearrayoutputstream.toByteArray(), "UTF-8");
         
          System.out.println("cmnet  " + strHead);
          
          }
          catch (Exception e)    {
             
              s_netmodewap = !s_netmodewap;
              return 2;
          }
         
        if(strHead.indexOf("status=1301") > -1 || strHead.indexOf("status=1300") > -1)
        {
          return 1;
        }
        else
        {
          return 0;
        }
     
  }
 
  CMWAP,代理用得很糙,呵呵。
 
  private int CountMoneyCMWAP(String urlstr)
  {
     
     
      String strHead = "";
      try{
         
         
         
          URL url = new URL(urlstr);
          Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress("10.0.0.172",80));
          HttpURLConnection connection=(HttpURLConnection)
          url.openConnection(proxy);
          String headerstr = connection.getHeaderField("Content-Type");
          if (headerstr!= null && headerstr.startsWith("text")) {
              connection=(HttpURLConnection)
              url.openConnection(proxy);
          }
         
          InputStream inputstream = connection.getInputStream();
          ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
          byte abyte1[] = new byte[1024];
          for(int k = 0; -1 != (k = inputstream.read(abyte1));)
              bytearrayoutputstream.write(abyte1, 0, k);
            
         
          strHead = new String(bytearrayoutputstream.toByteArray(), "UTF-8");
 
          System.out.println("cmwap  " + strHead);
          }
          catch (Exception e)    {
              e.printStackTrace();
              return 2;
          }
         
       
         
        if(strHead.indexOf("status=1301") > -1 || strHead.indexOf("status=1300") > -1)
        {
          return 1;
        }
        else
        {
          return 0;
        }
     
  }

 

以上都是传统的联网思维,所以连起来速度会很慢。后来经过移动OPHONE的人指点,终于弄明白了。如下,速度会快很多。

 

private int CountMoneyCMWAPNEWWAY(String urlstr)
  {
     
     
      String strHead = "";
      try{
         
         
          if(!GameLet._self.isNetworkCMWAPAvailable())
          {
              GameLet._self.ActiveNetWorkByMode("wap");
              return 2;
          }
         
         
          int splashIndex = urlstr.indexOf("/", 7);

          String hosturl = urlstr.substring(7, splashIndex);
          String hostfile = urlstr.substring(splashIndex);
         
          System.out.println("hosturl   " + hosturl);
          System.out.println("hostfile   " + hostfile);

          HttpHost proxy = new HttpHost( "10.0.0.172", 80, "http");
          HttpHost target = new HttpHost(hosturl, 80, "http");       

          DefaultHttpClient httpclient = new DefaultHttpClient();
          httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
           
          HttpGet req = new HttpGet(hostfile);

          HttpResponse rsp = httpclient.execute(target, req);
          HttpEntity entity = rsp.getEntity();
 
          InputStream inputstream = entity.getContent();
          ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
          byte abyte1[] = new byte[1024];
          for(int k = 0; -1 != (k = inputstream.read(abyte1));)
             bytearrayoutputstream.write(abyte1, 0, k);
         
          strHead = new String(bytearrayoutputstream.toByteArray(), "UTF-8");

          httpclient.getConnectionManager().shutdown(); 
          }
          catch (Exception e)    {
              return 2;
          }
         
        if(strHead.indexOf("status=1301") > -1 || strHead.indexOf("status=1300") > -1)
        {
          return 1;
        }
        else
        {
          return 0;
        }
     
  }

 

 

最后,有几个PERRMISSION别忘了加了。

 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

 

 

 

就写到这里,祝大家成功。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值