广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    android2.3.5 CDMA/EVDO拨号APN解决方案

    2018-04-05 08:31:46 次阅读 稿源:互联网
    广告
    google提供的android2.3里面,只能在GSM/WCDMA情况下才能从“设置”->“无线和网络”->“移动网络”->“接入点名称”中选择不同的apn帐号进行拨号连接,而CDMA/EVDO则没有这个功能。最近看了一下代码,简单实现了这个功能。

    1、默认的CDMA/EVDO里面连apn列表都不显示,要先把这个挖出来。
    修改packages/apps/Phone/res/xml/cdma_options.xml
    添加如下内容
    代码如下:

    <PreferenceScreen
    android:key="button_apn_key"
    android:title="@string/apn_settings"
    android:persistent="false">
    <intent android:action="android.intent.action.MAIN"
    android:targetPackage="com.android.settings"
    android:targetClass="com.android.settings.ApnSettings" />
    </PreferenceScreen>

    还有development/data/etc/apns-conf.xml的version值改为原来的加1,原因代码里面找。
    2、修改frameworks/base/telephony/java/com/android/internal/telephony/cdma/cdmadataconnectiontracker.java的setupData函数
    代码如下:

    private boolean setupData(String reason) {
    CdmaDataConnection conn = findFreeDataConnection();
    if (conn == null) {
    if (DBG) log("setupData: No free CdmaDataConnection found!");
    return false;
    }
    mActiveDataConnection = conn;
    String[] types;
    if (mRequestedApnType.equals(Phone.APN_TYPE_DUN)) {
    types = new String[1];
    types[0] = Phone.APN_TYPE_DUN;
    } else {
    types = mDefaultApnTypes;
    }
    //mActiveApn = new ApnSetting(0, "", "", "", "", "", "", "", "", "", "",
    // 0, types, "IP", "IP");
    Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");
    ContentResolver cResolver = phone.getContext().getContentResolver();
    Cursor cr = cResolver.query(PREFERRED_APN_URI, null, null, null, null);
    cr.moveToFirst();
    String user = cr.getString(cr.getColumnIndex("user"));
    String pass = cr.getString(cr.getColumnIndex("password"));
    String apn = cr.getString(cr.getColumnIndex("apn"));
    Log.e(LOG_TAG, "get apn : apn=" + apn + ", user=" + user + ", password=" + pass);
    mActiveApn = new ApnSetting(0, "", "", apn, "", "", "", "", "", user, pass,
    , types, "IP", "IP");
    Message msg = obtainMessage();
    msg.what = EVENT_DATA_SETUP_COMPLETE;
    msg.obj = reason;
    conn.connect(msg, mActiveApn);
    setState(State.INITING);
    phone.notifyDataConnection(reason);
    return true;
    }

    3、修改frameworks/base/telephony/java/com/android/internal/telephony/cdma/cdmadataconnection.java的onConnect函数:
    代码如下:

    phone.mCM.setupDataCall(
    Integer.toString(RILConstants.SETUP_DATA_TECH_CDMA),
    Integer.toString(dataProfile),
    //null, null, null,  //原来传进拨号的参数都是空的!!!
    cp.apn.apn, cp.apn.user, cp.apn.password,
    Integer.toString(RILConstants.SETUP_DATA_AUTH_PAP_CHAP),
    RILConstants.SETUP_DATA_PROTOCOL_IP, msg);

    4、修改frameworks/base/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java中对ApnSetting的定义,将其成员类型全部设为public

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告