android2.3.5 CDMA/EVDO撥號APN解決方案
更新時間:2013年01月16日 17:16:35 作者:
google提供的android2.3里面,只能在GSM/WCDMA情況下才能從“設(shè)置”->“無線和網(wǎng)絡(luò)”->“移動網(wǎng)絡(luò)”->“接入點名稱”中選擇不同的apn帳號進行撥號連接,而CDMA/EVDO則沒有這個功能,接下來本文介紹一些方法實現(xiàn)這個功能,感興趣的朋友可以了解下
google提供的android2.3里面,只能在GSM/WCDMA情況下才能從“設(shè)置”->“無線和網(wǎng)絡(luò)”->“移動網(wǎng)絡(luò)”->“接入點名稱”中選擇不同的apn帳號進行撥號連接,而CDMA/EVDO則沒有這個功能。最近看了一下代碼,簡單實現(xiàn)了這個功能。
1、默認的CDMA/EVDO里面連apn列表都不顯示,要先把這個挖出來。
修改packages/apps/Phone/res/xml/cdma_options.xml
添加如下內(nèi)容
<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函數(shù)
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函數(shù):
phone.mCM.setupDataCall(
Integer.toString(RILConstants.SETUP_DATA_TECH_CDMA),
Integer.toString(dataProfile),
//null, null, null, //原來傳進撥號的參數(shù)都是空的?。?!
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的定義,將其成員類型全部設(shè)為public
1、默認的CDMA/EVDO里面連apn列表都不顯示,要先把這個挖出來。
修改packages/apps/Phone/res/xml/cdma_options.xml
添加如下內(nèi)容
復(fù)制代碼 代碼如下:
<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函數(shù)
復(fù)制代碼 代碼如下:
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函數(shù):
復(fù)制代碼 代碼如下:
phone.mCM.setupDataCall(
Integer.toString(RILConstants.SETUP_DATA_TECH_CDMA),
Integer.toString(dataProfile),
//null, null, null, //原來傳進撥號的參數(shù)都是空的?。?!
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的定義,將其成員類型全部設(shè)為public
相關(guān)文章
Android中Permission權(quán)限機制的具體使用
這篇文章主要介紹了Android中Permission權(quán)限機制的具體使用,本文講解了權(quán)限級別 protection level、ICC(inter-component communication)權(quán)限保護等內(nèi)容,需要的朋友可以參考下2015-04-04
Android開發(fā)之Fragment懶加載的幾種方式及性能對比
這篇文章主要介紹了Android開發(fā)之Fragment懶加載的幾種方式及性能對比的相關(guān)資料,具體詳細介紹需要的小伙伴可以參考下面文章內(nèi)容2022-05-05
android view轉(zhuǎn)Bitmap生成截圖的方法
這篇文章主要介紹了android view轉(zhuǎn)Bitmap生成截圖的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
Android之聯(lián)系人PinnedHeaderListView使用介紹
Android聯(lián)系人中的ListView是做得比較獨特的,這幾天,我把他提取出來了,寫成一個簡單的例子,留著備用,感興趣的朋友可以參考下哈2013-06-06
Android編程實現(xiàn)向SD卡寫入數(shù)據(jù)的方法
這篇文章主要介紹了Android編程實現(xiàn)向SD卡寫入數(shù)據(jù)的方法,涉及Android針對SD卡狀態(tài)判斷,文件及權(quán)限操作等相關(guān)技巧,需要的朋友可以參考下2016-04-04
在Android上實現(xiàn)HttpServer的示例代碼
本篇文章主要介紹了在Android上實現(xiàn)HttpServer的示例代碼,實現(xiàn)Android本地的微型服務(wù)器,具有一定的參考價值,有興趣的可以了解一下2017-08-08

