android2.3.5 CDMA/EVDO拨号APN解决方案
android2.3.5 CDMA/EVDO拨号APN解决方案
发布时间:2016-12-28 来源:查字典编辑
摘要:google提供的android2.3里面,只能在GSM/WCDMA情况下才能从“设置”->“无线和网络”->“移动网络”->“接入点名称”...

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类