24 展訊Sprd設定-電池-識別預設電話程序和外撥事件
阿新 • • 發佈:2018-11-26
1. 目的
廣播攔截中,注意識別預設電話程序和外撥事件不可攔截
2. 原始碼
2.1 攔截判斷
// check out call for phone app if ("android".equals(callerApp) && intent != null && Intent.ACTION_NEW_OUTGOING_CALL.equals(intent.getAction()) && mSystemPreferredConfig.isDefaultPhoneApp(targetApp)) { if (DEBUG) Slog.d(TAG, "start phone app for out call:" + targetApp); return true; }
2.2 是否為預設電話程序
private String mDefaultPhoneApp; public boolean isDefaultPhoneApp(String pkgName) { return (pkgName != null && mDefaultPhoneApp != null && pkgName.equals(mDefaultPhoneApp)); } private SettingsObserver mSettingsObserver; class SettingsObserver extends ContentObserver { private final ContentResolver mResolver; final Uri defaultSMSUri = Settings.Secure.getUriFor( // 預設簡訊 Settings.Secure.SMS_DEFAULT_APPLICATION); final Uri defaultPhoneUri = Settings.Secure.getUriFor( // 預設電話 Settings.Secure.DIALER_DEFAULT_APPLICATION); SettingsObserver(Handler handler, ContentResolver resolver) { super(handler); mResolver = resolver; // mResolver.registerContentObserver(Settings.Secure.getUriFor( // Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES), false, this); if (defaultSMSUri != null) mResolver.registerContentObserver(defaultSMSUri, false, this, UserHandle.USER_ALL); if (defaultPhoneUri != null) mResolver.registerContentObserver(defaultPhoneUri, false, this, UserHandle.USER_ALL); } @Override public void onChange(boolean selfChange, Uri uri) { // getEnabledServiceList(); try { if (defaultSMSUri !=null && defaultSMSUri.equals(uri)) { mDefaultSmsComp = SmsApplication.getDefaultSmsApplication(mContext, true); if (DEBUG) Slog.d(TAG, "mDefaultSmsComp:" + mDefaultSmsComp + " mDefaultPhoneApp:" + mDefaultPhoneApp); } else if (defaultPhoneUri != null && defaultPhoneUri.equals(uri)) { mDefaultPhoneApp = DefaultDialerManager.getDefaultDialerApplication(mContext); if (DEBUG) Slog.d(TAG, "mDefaultSmsComp:" + mDefaultSmsComp + " mDefaultPhoneApp:" + mDefaultPhoneApp); } } catch (Exception e) {} } }