b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Android8.1 源码修改之借助黑名单屏蔽系统邮件功能和来电功能

电脑杂谈  发布时间:2019-09-05 06:03:03  来源:网络整理

短信拦截_cc短信拦截_垃圾短信拦截

之前写过一篇Android6.0 的屏蔽系统邮件功能和来电功能,具体看此处

同样的近来有个新需求,需要将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;
}

cc短信拦截_垃圾短信拦截_短信拦截

代码很简单,传递一个号码,去BlockedNumberContract中查找是否存在,存在即为黑名单,拦截,不存在则不拦截。

为了实现拦截的功能,我在后面加了判断,Settings.Global.IS_INTERCEPT_TELE 读取值,这是在Settings中自定义的,当然你也可以运用SharedPreference保存cc短信拦截,这样就可以动态的控制超过屏蔽邮件和电话的功能。

当然即使你应该有黑名单列表,可在这里增加xml以及查询,再做对应的拦截返回true操作。

方法同上

BlockChecker的isBlocked()方法,电话和短信就会走这儿,如果你必须单独分开cc短信拦截,那么就应该去跟踪各自从那里调用过来的。

通过全局搜索,找到如下目录

cc短信拦截_垃圾短信拦截_短信拦截

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

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

垃圾短信拦截_短信拦截_cc短信拦截

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

效果图

实际上就是添加一个SwitchPreference来控制 Settings.Global.IS_INTERCEPT_TELE 的值

在安全性和位置信息中添加 拦截修改选项

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

短信拦截_垃圾短信拦截_cc短信拦截

仿照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;
}

好了,至此功能完成,感兴趣的可研读以下参考文章

参考文章

Android7.0 Phone应用源码分析(二) phone来电流程分析

Telephony之GsmCallTracker

Android 8.0来电流程分析(一)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-121761-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...