android2.3.5 EVDO拨号APN

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,0, 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

5、make

 

参考:

1、http://hellorheaven.iteye.com/blog/1258422

2、http://blog.csdn.net/jhuang4545/article/details/7376863



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部