通过拨号盘,输入暗码启动工程模式流程分析。
1.暗码启动应用流程
1.1拨号盘的显示
用工具抓到点击弹出拨号键盘的button的id是fab,点击之后启动DialpadFragment显示拨号盘
- packages/apps/Dialer/java/com/android/dialer/main/impl/OldMainActivityPeer.java
private void initLayout(Bundle savedInstanceState) {
...
FloatingActionButton fab = activity.findViewById(R.id.fab);
fab.setOnClickListener(
v -> {
Logger.get(activity).logImpression(DialerImpression.Type.MAIN_CLICK_FAB_TO_OPEN_DIALPAD);
searchController.showDialpad(true);
if (callLogAdapterOnActionModeStateChangedListener.isEnabled) {
LogUtil.i("OldMainActivityPeer.onFabClicked", "closing multiselect");
callLogAdapterOnActionModeStateChangedListener.actionMode.finish();
}
});
...
}
- packages/apps/Dialer/java/com/android/dialer/main/impl/MainSearchController.java
private void showDialpad(boolean animate, boolean fromNewIntent) {
...
// Show Dialpad
if (dialpadFragment == null) {
dialpadFragment = new DialpadFragment();
dialpadFragment.setStartedFromNewIntent(fromNewIntent);
transaction.add(R.id.dialpad_fragment_container, dialpadFragment, DIALPAD_FRAGMENT_TAG);
searchFragment.setQuery("", CallInitiationType.Type.DIALPAD);
} else {
dialpadFragment.setStartedFromNewIntent(fromNewIntent);
transaction.show(dialpadFragment);
}
transaction.commit();
}
1.2 输入暗码后的逻辑处理
- packages/apps/Dialer/java/com/android/dialer/dialpadview/DialpadFragment.java
/** Fragment that displays a twelve-key phone dialpad. */
public class DialpadFragment extends Fragment
implements View.OnClickListener,
View.OnLongClickListener,
View.OnKeyListener,
AdapterView.OnItemClickListener,
TextWatcher,
PopupMenu.OnMenuItemClickListener,
DialpadKeyButton.OnPressedListener {
其继承了TextWatcher类,能够监听实现输入变化。
@Override
public void afterTextChanged(Editable input) {
// When DTMF dialpad buttons are being pressed, we delay SpecialCharSequenceMgr sequence,
// since some of SpecialCharSequenceMgr's behavior is too abrupt for the "touch-down"
// behavior.
if (!digitsFilledByIntent

本文详细分析了Android拨号盘中输入特定暗码启动工程模式的过程,从点击拨号盘按钮,到输入暗码后的逻辑处理,再到调用TelephonyManager处理秘密代码,最后广播触发接收器启动相关应用。主要涉及DialpadFragment、SpecialCharSequenceMgr和TelephonyManagerCompat等组件,揭示了系统如何识别并响应特殊代码。
最低0.47元/天 解锁文章
752

被折叠的 条评论
为什么被折叠?



