android2.3.5 CDMA and EVDO dial APN solution
- 2020-05-07 20:28:25
- OfStack
In google's android2.3, you can only "set" - from GSM/WCDMA
>
"Wireless and networking" -
>
"Mobile network" -
>
Select a different apn account in "access point name" for dial-up connections, while CDMA/EVDO does not. Recently, I took a look at the code and simply implemented this function.
1. The CDMA/EVDO of by default does not even show the apn list.
Modify packages apps/Phone res/xml/cdma_options xml
Add the following
And development/data/etc/apns - conf. xml version value instead of the original plus 1, find a reason code.
2, modified frameworks base/telephony/java/com/android/internal/telephony/cdma/cdmadataconnectiontracker java setupData function
3, modify frameworks/base/telephony/java/com/android/internal telephony/cdma/cdmadataconnection java onConnect function:
4, modify frameworks/base/telephony/java/com/android/internal/telephony/gsm/ApnSetting. The definition of ApnSetting java, its entire member type set to public
1. The CDMA/EVDO of by default does not even show the apn list.
Modify packages apps/Phone res/xml/cdma_options xml
Add the following
<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>
And development/data/etc/apns - conf. xml version value instead of the original plus 1, find a reason code.
2, modified frameworks base/telephony/java/com/android/internal/telephony/cdma/cdmadataconnectiontracker java setupData function
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, modify frameworks/base/telephony/java/com/android/internal telephony/cdma/cdmadataconnection java onConnect function:
phone.mCM.setupDataCall(
Integer.toString(RILConstants.SETUP_DATA_TECH_CDMA),
Integer.toString(dataProfile),
//null, null, null, // The original parameters are empty!!
cp.apn.apn, cp.apn.user, cp.apn.password,
Integer.toString(RILConstants.SETUP_DATA_AUTH_PAP_CHAP),
RILConstants.SETUP_DATA_PROTOCOL_IP, msg);
4, modify frameworks/base/telephony/java/com/android/internal/telephony/gsm/ApnSetting. The definition of ApnSetting java, its entire member type set to public