中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android8.1 通過黑名單屏蔽系統短信和來電功能

發布時間:2020-09-10 18:35:50 來源:腳本之家 閱讀:217 作者:cczheng 欄目:移動開發

前言

同樣的最近有個新需求,需要將8.1 設備的來電功能和短信功能都屏蔽掉,特殊產品就是特殊定制,那就開始吧。

屏蔽短信功能

還可沿用之前的6.0 處理方法, 在 SmsReceiverService.java handleSmsReceived()中進行攔截分發

但是想了想這次準備搞點不一樣的,我發現通訊錄和之前6.0不太一樣,8.1有個添加屏蔽聯系人的功能,能夠屏蔽指定電話和短信,也就是黑名單功能。所以此次就通過黑名單的方式進行攔截,通過下面幾位老哥的詳盡分析和打印日志找到修改地方

源碼位置 frameworks\opt\telephony\src\java\com\android\internal\telephony\BlockChecker.java

public static boolean isBlocked(Context context, String phoneNumber) {
 boolean isBlocked = false;
 long startTimeNano = System.nanoTime();
 //cczheng add [S]
 log("phoneNumber==="+phoneNumber);
 boolean isIntercept = Settings.Global.getInt(context.getContentResolver(), 
   Settings.Global.IS_INTERCEPT_TELE, 1) == 1;
 if (isIntercept) {
  log("Intercept tele don't delivery..... default is blocked");
  return true;
 }
 //cczheng add [E]
 try {
  if (BlockedNumberContract.SystemContract.shouldSystemBlockNumber(
    context, phoneNumber)) {
   Rlog.d(TAG, phoneNumber + " is blocked.");
   isBlocked = true;
  }
 } catch (Exception e) {
  Rlog.e(TAG, "Exception checking for blocked number: " + e);
 }
 int durationMillis = (int) ((System.nanoTime() - startTimeNano) / 1000000);
 if (durationMillis > 500 || VDBG) {
  Rlog.d(TAG, "Blocked number lookup took: " + durationMillis + " ms.");
 }
 return isBlocked;
}

代碼很簡單,傳遞一個號碼,去BlockedNumberContract數據庫中查找是否存在,存在即為黑名單,攔截,不存在則不攔截。

為了實現攔截的功能,我在前面加了判斷,Settings.Global.IS_INTERCEPT_TELE 讀取值,這是在Settings中自定義的,當然你也可以采用SharedPreference保存,這樣就可以動態的控制達到屏蔽短信和電話的功能。

當然如果你需要有黑名單列表,可在此處增加xml或者數據庫查詢,再做對應的攔截返回true操作。

屏蔽來電功能

方法同上

相關的簡單分析

BlockChecker的isBlocked()方法,電話和短信都會走這里,如果你需要單獨分開,那么就需要去跟蹤各自從哪里調用過來的。

通過全局搜索,找到如下目錄

vendor\mediatek\proprietary\packages\services\Telecomm\src\com\android\server\telecom\callfiltering

•AsyncBlockCheckFilter.java
•BlockCheckerAdapter.java
•CallFilteringResult.java
•CallFilterResultCallback.java
•CallScreeningServiceFilter.java
•DirectToVoicemailCallFilter.java
•IncomingCallFilter.java

AsyncBlockCheckFilter中調用 BlockCheckerAdapter 的isBlocked(),而BlockCheckerAdapter最終調用到BlockChecker中,所以要單獨屏蔽電話,可在AsyncBlockCheckFilter中操作

 @Override
protected Boolean doInBackground(String... params) {
 try {
  Log.continueSession(mBackgroundTaskSubsession, "ABCF.dIB");
  Log.addEvent(mIncomingCall, LogUtils.Events.BLOCK_CHECK_INITIATED);
  return mBlockCheckerAdapter.isBlocked(mContext, params[0]);
 } finally {
  Log.endSession();
 }
}

接下來再來看短信的

vendor\mediatek\proprietary\frameworks\opt\telephony\src\java\com\mediatek\internal\telephony\cdma\MtkCdmaInboundSmsHandler.java

vendor\mediatek\proprietary\frameworks\opt\telephony\src\java\com\mediatek\internal\telephony\gsm\MtkGsmInboundSmsHandler.java

都是直接調用BlockChecker的isBlocked()方法

在Settings中增加Switch控制是否啟用攔截

Android8.1 通過黑名單屏蔽系統短信和來電功能

效果圖

實際上就是添加一個SwitchPreference來控制 Settings.Global.IS_INTERCEPT_TELE 的值

在安全性和位置信息中添加 攔截設置選項

源碼位置 vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SecuritySettings.java

仿照security_settings_misc.xml增加一份 security_settings_blockcheck.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
 android:title="@string/security_settings_title">
 <PreferenceCategory android:title="@string/security_blockcheck_title"
   android:persistent="false">
  <SwitchPreference
   android:key="is_intercept"
   android:title="@string/is_intercept"  android:summary="@string/is_intercept_summary"/>
 </PreferenceCategory>
</PreferenceScreen>

在SecuritySettings中findPreference("is_intercept"),監聽onPreferenceChange()事件,將回調結果 value 保存到IS_INTERCEPT_TELE

@Override
public boolean onPreferenceChange(Preference preference, Object value) {
 boolean result = true;
 final String key = preference.getKey();
 final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils();

  if (KEY_IS_INTERCEPT.equals(key)) {
  Settings.Global.putInt(getContentResolver(), Settings.Global.IS_INTERCEPT_TELE,
    ((Boolean) value) ? 1 : 0);
 }
 return result;
}

總結

以上所述是小編給大家介紹的Android8.1 通過黑名單屏蔽系統短信和來電功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博罗县| 哈尔滨市| 信宜市| 北宁市| 余姚市| 邳州市| 陵水| 揭东县| 通榆县| 巴里| 石屏县| 明水县| 宁远县| 泽库县| 河间市| 虎林市| 民县| 新宁县| 象州县| 丹棱县| 大荔县| 阜康市| 留坝县| 裕民县| 澄江县| 新密市| 柳河县| 罗城| 南雄市| 方正县| 台南市| 麦盖提县| 威远县| 临邑县| 刚察县| 霍山县| 井陉县| 淮阳县| 兰州市| 方城县| 千阳县|