网络适配

    技术2025-11-14  6

    网络分为几种:wifi,移动网络(移动、联通、电信)

     

    移动、联通的适配好处理,无非就是直连接和代理(10.0.0.172)

    cmnet,3gnet,uninet,wifi都是不需要代理的,直接用地址访问网络即可

     

    Cursor cursor = context.getContentResolver().query(PREFERRED_APN_URI,    new String[] { "_id", "apn", "proxy","mnc" }, null, null, null);  cursor.moveToFirst();  if (!cursor.isAfterLast()) {   String apn = cursor.getString(1);   if (apn.equalsIgnoreCase("cmnet") || apn.equalsIgnoreCase("3gnet") || apn.equalsIgnoreCase("uninet")     || apn.equalsIgnoreCase("#777")) {     type = WIFIAndCMNET;

       } else if (apn.equalsIgnoreCase("cmwap") || apn.equalsIgnoreCase("3gwap") || apn.equalsIgnoreCase("uniwap")) {    type = CMWAP;   }  }

     

    今天用电信的定制机分别测试了移动,联通 2.5G的卡,电信3G的卡。

    总结如下:

    无论如何在机器上更改设置

    String apn = cursor.getString(1);//这段代码返回的值永远是:#777,proxy的值:10.0.0.200

    猜想是不是这电信的定制机在机器上已经把这些参数写死了。

    问题就来了:因apn和proxy返回的值都一样,所以就区分不了是代理还是直连接。

    导致的问题:电信定制机 + 移动2.5G的卡(cmwap)方式 = 程序访问不了网络

    测过很多客户端,都是如此。

    电信定制机 + 移动2.5G的卡(cmnet)方式 = 程序可以访问网络

     

    想过用如下方法来解决问题,发现不行。代理字段返回的总是:10.0.0.200

    cursor.moveToFirst();  if (!cursor.isAfterLast()) {   String apn = cursor.getString(1);   if (apn.equalsIgnoreCase("cmnet") || apn.equalsIgnoreCase("3gnet") || apn.equalsIgnoreCase("uninet")     || apn.equalsIgnoreCase("#777")) {    String proxy = cursor.getString(2);    String mnc = cursor.getString(3);    if(proxy != null && proxy.equalsIgnoreCase("10.0.0.172")){     type = CMWAP;//适配电信定制机装移动联通的卡       }else{     type = WIFIAndCMNET;    }   } else if (apn.equalsIgnoreCase("cmwap") || apn.equalsIgnoreCase("3gwap") || apn.equalsIgnoreCase("uniwap")) {    type = CMWAP;   }

     

     

    本以为联通的也是如此,没想到的是:电信定制机 + 联通2.5G的卡(wap、net)方式 = 程序可以访问网络

    进一步调试得知:该种情况下,返回的proxy都是为空,代码中用直连接方式即可解决问题。

     

    用中国电信3G的卡,无论手机上的设置是否代理,发现直接用不代理的方式对应的代码就可以保证程序可以访问网络,好奇怪,

    当然也省事,不用去管电信的代理方式了。

     

    NND,定制机怎么这么多毛病。

     

    以上是通过测试所得,请高人指点。

     

    ------------------------------------

    补充:安装包发出去后,陆续收到一些用户的投诉;

    中国电信定制机 + 中国电信卡(3G) = 上不了网。

     

    一开始很奇怪,以前用XT800适配过,没有问题。后来用其他机型测试得到原因:

    1、接入点名返回的不是“#777”,是ctnet.

    2、Cursor cursor = context.getContentResolver().query(PREFERRED_APN_URI,    new String[] { "_id", "apn", "proxy","mnc" }, null, null, null);  cursor.moveToFirst();

    该处的cursor为空

    用另一种方式解决问题:

     

    Cursor c = context.getContentResolver().query(PREFERRED_APN_URI,null, null, null, null);

                c.moveToFirst();

                String user=c.getString(c.getColumnIndex("user"));

                if(user.equalsIgnoreCase("ctnet")){

        }

     

     

     

     

    最新回复(0)