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

 更新时间:2013年01月16日 17:16:35   作者:  
google提供的android2.3里面,只能在GSM/WCDMA情况下才能从“设置”->“无线和网络”->“移动网络”->“接入点名称”中选择不同的apn帐号进行拨号连接,而CDMA/EVDO则没有这个功能,接下来本文介绍一些方法实现这个功能,感兴趣的朋友可以了解下
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

相关文章

  • Android中Permission权限机制的具体使用

    Android中Permission权限机制的具体使用

    这篇文章主要介绍了Android中Permission权限机制的具体使用,本文讲解了权限级别 protection level、ICC(inter-component communication)权限保护等内容,需要的朋友可以参考下
    2015-04-04
  • Android开发之Fragment懒加载的几种方式及性能对比

    Android开发之Fragment懒加载的几种方式及性能对比

    这篇文章主要介绍了Android开发之Fragment懒加载的几种方式及性能对比的相关资料,具体详细介绍需要的小伙伴可以参考下面文章内容
    2022-05-05
  • Android 实现钉钉自动打卡功能

    Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下
    2021-03-03
  • android view转Bitmap生成截图的方法

    android view转Bitmap生成截图的方法

    这篇文章主要介绍了android view转Bitmap生成截图的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Android之联系人PinnedHeaderListView使用介绍

    Android之联系人PinnedHeaderListView使用介绍

    Android联系人中的ListView是做得比较独特的,这几天,我把他提取出来了,写成一个简单的例子,留着备用,感兴趣的朋友可以参考下哈
    2013-06-06
  • Android中快速便捷的实现圆角按钮方法详解

    Android中快速便捷的实现圆角按钮方法详解

    圆角按钮在我们现在的界面中常常会用到,最近在开发中就又遇到了,所以想着有没有更快速更便捷的实现方法呢,所以就有了这篇文章,本文主要给大家介绍了关于Android中如何快速便捷的实现圆角按钮的相关资料,需要的朋友可以参考下。
    2017-05-05
  • Android编程实现向SD卡写入数据的方法

    Android编程实现向SD卡写入数据的方法

    这篇文章主要介绍了Android编程实现向SD卡写入数据的方法,涉及Android针对SD卡状态判断,文件及权限操作等相关技巧,需要的朋友可以参考下
    2016-04-04
  • android如何获取联系人所有信息

    android如何获取联系人所有信息

    这篇文章主要为大家详细介绍了android如何获取联系人所有信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 在Android上实现HttpServer的示例代码

    在Android上实现HttpServer的示例代码

    本篇文章主要介绍了在Android上实现HttpServer的示例代码,实现Android本地的微型服务器,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • Android:“万能”Activity重构篇

    Android:“万能”Activity重构篇

    本文主要介绍了mvp以及每一层,以及使用mvp来重构“万能”Activity,其实每一层需要注意的东西还有很多,比如model层是最难写的一层。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01

最新评论