前言
公用電話産品,插入SIM卡後要求自動打開Volte功能,即插即用,用完拔卡就走
實作
第一步 開關對應的代碼
通過列印日志和全局查找,源碼位置 vendor/mediatek/proprietary/packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java
04-15 08:15:29.238 1191-1191/com.android.phone I/NetworkSettings: isUpdateTabsNeeded:- DO_NOTHING newSil.size()=1 mActiveSubInfos.size()=1
04-15 08:15:29.240 1191-1191/com.android.phone D/NetworkSettings: initializeSubscriptions: DO_NOTHING
04-15 08:15:29.240 1191-1191/com.android.phone D/NetworkSettings: convertTabToSlot: info size=1 currentTab=0 slotId=0
04-15 08:15:29.246 1191-1191/com.android.phone I/NetworkSettings: updatePhone:- slotId=0 sir={id=1, iccId=89861114706315182802 simSlotIndex=0 displayName=中國電信 carrierName=中國電信 nameSource=0 iconTint=-16746133 dataRoaming=0 [email protected] mcc 460 mnc 11 isEmbedded false accessRules null}
04-15 08:15:29.246 1191-1191/com.android.phone D/NetworkSettings: updateBody: isLteOnCdma=true phoneSubId=1
04-15 08:15:29.253 1191-1191/com.android.phone D/NetworkSettings: phoneType == PhoneConstants.PHONE_TYPE_CDMA or is CT VOLTE...
04-15 08:15:29.266 1191-1191/com.android.phone D/NetworkSettings: isWorldMode=false
04-15 08:15:29.267 1191-1191/com.android.phone D/NetworkSettings: isWorldMode=false
04-15 08:15:29.267 1191-1191/com.android.phone D/NetworkSettings: settingsNetworkMode: 10
04-15 08:15:29.285 1191-1191/com.android.phone D/NetworkSettings: [addEnhanced4GLteSwitchPreference] volteEnabled :true
04-15 08:15:29.285 1191-1191/com.android.phone D/NetworkSettings: [addEnhanced4GLteSwitchPreference] Remove mButton4glte!
04-15 08:15:29.285 1191-1191/com.android.phone D/NetworkSettings: [addEnhanced4GLteSwitchPreference] ss :false
04-15 08:15:29.307 1191-1191/com.android.phone D/DefaultMobileNetworkSettingsExt: customizeEnhanced4GLteSwitchPreference
04-15 08:15:29.320 1191-1191/com.android.phone D/NetworkSettings: CdmaNetworkSettings destroy [email protected]
04-15 08:15:29.320 1191-1191/com.android.phone D/CdmaNetworkSettings: onDestroy
通過 MtkImsManager.setEnhanced4gLteModeSetting(this, enhanced4gModePref.isChecked(), phoneId); 這行代碼來實作volte的打開、關閉
詳細的分析流程,請看這篇
第二步 插卡後調用開關的代碼
通過插卡後分析日志發現列印 android.intent.action.SIM_STATE_CHANGED, 字面意思Sim卡狀态改變通知, 全局查找到,
源碼位置 vendor\mediatek\proprietary\packages\services\Telephony\src\com\mediatek\settings\cdma\CdmaVolteServiceChecker.java
修改如下
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive, action = " + intent.getAction());
updateState();
// cczheng add when recive SIM_STATE_CHANGED default open volte
if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(intent.getAction())) {
updateVolteState();
}
};
};
//cczheng add check volte is open, and defalut open volte
private void updateVolteState(){
Log.e(TAG, "updateVolteState....");
int subId = getListenSubId();
Log.i(TAG, "isValidSubscriptionId=="+SubscriptionManager.isValidSubscriptionId(subId));
Log.i(TAG, "isCtVolteEnabled=="+TelephonyUtilsEx.isCtVolteEnabled());
if (SubscriptionManager.isValidSubscriptionId(subId) && TelephonyUtilsEx.isCtVolteEnabled()) {
boolean volteOn = MtkImsManager.isEnhanced4gLteModeSettingEnabledByUser(mContext,
SubscriptionManager.getPhoneId(subId));
boolean isEnable4gOn = isEnable4gOn(subId);
Log.i(TAG, "isEnable4gOn=="+isEnable4gOn);
Log.i(TAG, "volteOn=="+volteOn);
int phoneId = SubscriptionManager.getPhoneId(subId);
Log.e(TAG, "phoneId = " + phoneId + " subId="+subId);
if (!volteOn) {
MtkImsManager.setEnhanced4gLteModeSetting(mContext, true, phoneId);
}
}
}
private boolean isLteNetwork(int subId) {
boolean isLte = false;
int networkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
final int dataNetworkType = TelephonyManager.getDefault().getDataNetworkType(subId);
final int voiceNetworkType = TelephonyManager.getDefault().getVoiceNetworkType(subId);
Log.d(TAG, "dataNetworkType = " + dataNetworkType
+ ", voiceNetworkType = " + voiceNetworkType);
if (TelephonyManager.NETWORK_TYPE_UNKNOWN != dataNetworkType) {
networkType = dataNetworkType;
} else if (TelephonyManager.NETWORK_TYPE_UNKNOWN != voiceNetworkType) {
networkType = voiceNetworkType;
}
if ((networkType == TelephonyManager.NETWORK_TYPE_LTE)
|| (networkType == TelephonyManager.NETWORK_TYPE_LTE_CA)) {
isLte = true;
}
Log.d(TAG, "isLte = " + isLte);
return isLte;
}
至此,搞定,簡單說下上面的代碼,當收到SIM狀态改變的廣播,檢查卡的subId是否是有效的(subId>0),卡片是否支援Volte功能,同時滿足則擷取目前Volte是否已啟用,未啟用則調用MtkImsManager.setEnhanced4gLteModeSetting()打開
Android8.1 源碼修改之通過黑名單屏蔽系統短信功能和來電功能
前言 之前寫過一篇Android6.0 的屏蔽系統短信功能和來電功能,具體看這裡 同樣的最近有個新需求,需要将8.1 裝置的來電功能和短信功能都屏蔽掉,特殊産品就是特殊定制,那就開始吧. 屏蔽短信功能 ...
Android6.0 源碼修改之屏蔽系統短信功能和來電功能
一.屏蔽系統短信功能 1.屏蔽所有短信 android 4.2 短信發送流程分析可參考這篇 戳這 源碼位置 vendor\mediatek\proprietary\packages\apps\Mms\ ...
Java學習-039-源碼 jar 包的二次開發擴充執行個體(源碼修改)
最近在使用已有的一些 jar 包時,發現有些 jar 包中的一些方法無法滿足自己的一些需求,例如傳回固定的格式,字元串處理等等,因而需要對原有 jar 檔案中對應的 class 檔案進行二次開發擴充, ...
python的paramiko源碼修改了一下,寫了個操作指令的日志審計 bug修改
python的paramiko源碼修改了一下,寫了個操作指令的日志審計,但是記錄的日志中也将backspace删除鍵記錄成^H這個了,于是改了一下代碼,用字元串的特性. 字元串具有清單的特性 > ...
Android6.0 源碼修改之 Contacts應用
一.Contacts應用的主界面和聯系人詳情界面增加頂部菜單添加退出按鈕 通過Hierarchy View 工具可以發現 主界面對應的類為 PeopleActivity 聯系人詳情界面對應的類為 Qu ...
Android6.0 源碼修改之 仿IOS添加全屏可拖拽浮窗傳回按鈕
前言 之前寫過屏蔽系統導航欄功能的文章,具體可看Android6.0 源碼修改之屏蔽導航欄虛拟按鍵(Home和RecentAPP)/動态顯示和隐藏NavigationBar 在某些特殊定制的版本中要求 ...
el-upload源碼修改跳坑
之前給element-ui提了一個問題,結果沒有鳥我,沒辦法,隻能修改源碼來滿足需求了 (備注:element-ui2依然沒有修改,為了迎合産品還是要改源碼) 本文讨論的元件屬性僅限于list-typ ...
openfire源碼修改後如何打包部署到linux伺服器上
原文:http://blog.csdn.net/jinzhencs/article/details/50457152 1.linux版本的3.10.3解壓部署啟動(過程略,參考我的另一篇博文http: ...
python requests接收chunked編碼問題-python源碼修改
python requests接收chunked編碼問題-python源碼修改 學習了:https://blog.csdn.net/wangzuxi/article/details/40377467
随機推薦
Nginx配置SSI
一.什麼是SSISSI:Server Side Include,是一種基于服務端的網頁制作技術,大多數(尤其是基于Unix平台)的web伺服器如Netscape Enterprise Server等均 ...
Delphi 能不能從Ring 3進入Ring 0
我發現了一篇發表在1999.11.29 b13版的 東南大學 盧威 [email protected] 是用vc++嵌彙編做的, ...
使SSH不用輸入密碼
1. 自動ssh/scp方法== A為本地主機(即用于控制其他主機的機器) ;B為遠端主機(即被控制的機器Server), 假如ip為192.168.60.110;A和B的系統都是Linux 在A上運 ...
hdu3081 Marriage Match II
新年第一篇,又花了一早上,真是蠢啊! 二分+網絡流 之前對于讨論哪些人是朋友的時候複雜度過高 直接n3的暴力雖然看起來複雜度高,其實并不是每次都成立 #include
[SDOI2010] 魔法豬學院
Description 給定e和邊權,求有多少條不同的道路能從1到n使得邊權之和的和小于e Solution A*裸題 娘的要是SPFA再把dis寫成to就剁手 // By YoungNeal #in ...
Android使用SimpleAdapter
SimpleAdapter的使用步驟如下: 聲明ListView,并進行初始化操作 準備資料集,一般用list來實作,當然也可以使用數組 為listview适配simpleadapter 如下代碼: ...
初學mysql 那些記不住的指令
修改密碼: https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html MySQL 5.7.6 之後: ALTER USER ...
DJango 前三天小結
一 DJango 所有指令: 1下載下傳: 控制台:pip install django== pip install django== -i 源解釋器:找到解釋器,點選加号搜尋django 2建立項目; ...
基于PHP給大家講解防刷票的一些技巧
刷票行為,一直以來都是個難題,無法從根本上防止. 但是我們可以盡量減少刷票的傷害,比如:通過人為增加的邏輯限制. 基于 PHP,下面介紹防刷票的一些技巧: 1.使用CURL進行資訊僞造 $ch = c ...
提取日志中出現的userId或其他資訊
項目上線後經常出現需要統計使用者資料.接口請求等.完美的情況下,在項目開始前就設計好哪些request.中間過程需要落地到db.或以一定格式存入專門的log中,但也常需要同學們臨時去業務日志中grep ...