從Android端鎖定慣用網路類型
2016-05-05 22:14
501 查看
Android的慣用網路類型, 也就是preferred network mode, 是儲存在SettingsProvider中. 當然, modem中也會儲存一份, 但依照Android的設計, 是以SettingsProvider中所存放的使用者設定值為主, 若AP core和modem不同步時, 就會由AP core主動向modem端發起同步的請求.
從Android M開始, Android Settingsprovider的儲存方式改由原本的databases換成XML檔,因此,我們只要用修改設定檔的方式即可
1. adb pull/data/system/users/0/settings_global.xml
2. 將文件中 "preferred_network_mode" 的值改成你想要的RAT值 (相關值可參考 RilConstants.java ),這裡的10代表全網,
包含GSM, WCDMA, LTE和CDMA2000
<setting id="38"name="preferred_network_mode" value="10"package="android" />
<setting id="90"name="preferred_network_mode1" value="10"package="com.android.phone" />
3. 再將修改過的 settings_global.xml 推送回手機中
adbpush settings_global.xml data/system/users/0/
4. 重啟手機 "adb reboot"
回顧一下Android L以及以前版本.當時使用的是數據庫,操作如下
1. 輸入 "adb shell" 進入shell
2. 開啟數據庫 "sqlite3data/data/com.android.providers.settings/databases/settings.db"
3. 若要讀取當年的慣用網路設置值,可輸入
"select * from global wherename like '%preferred_network_mode%';"
4. 若要修改值,輸入以下SQL指令,這裡的3代表GSM/WCDMA
"update global set value ='3' where name like '%preferred_network_mode%';"
5. 重啟手機 "adb reboot"
以下是 RilConstants.java 中所定義的網路模式值
/* NETWORK_MODE_* See ril.h RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE */
int NETWORK_MODE_WCDMA_PREF = 0; /* GSM/WCDMA (WCDMA preferred) */
int NETWORK_MODE_GSM_ONLY = 1; /* GSM only */
int NETWORK_MODE_WCDMA_ONLY = 2; /* WCDMA only */
int NETWORK_MODE_GSM_UMTS = 3; /* GSM/WCDMA (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_CDMA = 4; /* CDMA and EvDo (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_CDMA_NO_EVDO = 5; /* CDMA only */
int NETWORK_MODE_EVDO_NO_CDMA = 6; /* EvDo only */
int NETWORK_MODE_GLOBAL = 7; /* GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_LTE_CDMA_EVDO = 8; /* LTE, CDMA and EvDo */
int NETWORK_MODE_LTE_GSM_WCDMA = 9; /* LTE, GSM/WCDMA */
int NETWORK_MODE_LTE_CMDA_EVDO_GSM_WCDMA = 10; /* LTE, CDMA, EvDo, GSM/WCDMA */
int NETWORK_MODE_LTE_ONLY = 11; /* LTE Only mode. */
int NETWORK_MODE_LTE_WCDMA = 12; /* LTE/WCDMA */
int PREFERRED_NETWORK_MODE = NETWORK_MODE_WCDMA_PREF;
從Android M開始, Android Settingsprovider的儲存方式改由原本的databases換成XML檔,因此,我們只要用修改設定檔的方式即可
1. adb pull/data/system/users/0/settings_global.xml
2. 將文件中 "preferred_network_mode" 的值改成你想要的RAT值 (相關值可參考 RilConstants.java ),這裡的10代表全網,
包含GSM, WCDMA, LTE和CDMA2000
<setting id="38"name="preferred_network_mode" value="10"package="android" />
<setting id="90"name="preferred_network_mode1" value="10"package="com.android.phone" />
3. 再將修改過的 settings_global.xml 推送回手機中
adbpush settings_global.xml data/system/users/0/
4. 重啟手機 "adb reboot"
回顧一下Android L以及以前版本.當時使用的是數據庫,操作如下
1. 輸入 "adb shell" 進入shell
2. 開啟數據庫 "sqlite3data/data/com.android.providers.settings/databases/settings.db"
3. 若要讀取當年的慣用網路設置值,可輸入
"select * from global wherename like '%preferred_network_mode%';"
4. 若要修改值,輸入以下SQL指令,這裡的3代表GSM/WCDMA
"update global set value ='3' where name like '%preferred_network_mode%';"
5. 重啟手機 "adb reboot"
以下是 RilConstants.java 中所定義的網路模式值
/* NETWORK_MODE_* See ril.h RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE */
int NETWORK_MODE_WCDMA_PREF = 0; /* GSM/WCDMA (WCDMA preferred) */
int NETWORK_MODE_GSM_ONLY = 1; /* GSM only */
int NETWORK_MODE_WCDMA_ONLY = 2; /* WCDMA only */
int NETWORK_MODE_GSM_UMTS = 3; /* GSM/WCDMA (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_CDMA = 4; /* CDMA and EvDo (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_CDMA_NO_EVDO = 5; /* CDMA only */
int NETWORK_MODE_EVDO_NO_CDMA = 6; /* EvDo only */
int NETWORK_MODE_GLOBAL = 7; /* GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
int NETWORK_MODE_LTE_CDMA_EVDO = 8; /* LTE, CDMA and EvDo */
int NETWORK_MODE_LTE_GSM_WCDMA = 9; /* LTE, GSM/WCDMA */
int NETWORK_MODE_LTE_CMDA_EVDO_GSM_WCDMA = 10; /* LTE, CDMA, EvDo, GSM/WCDMA */
int NETWORK_MODE_LTE_ONLY = 11; /* LTE Only mode. */
int NETWORK_MODE_LTE_WCDMA = 12; /* LTE/WCDMA */
int PREFERRED_NETWORK_MODE = NETWORK_MODE_WCDMA_PREF;
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件