Andorid11 暗码启动应用(一)

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

通过拨号盘,输入暗码启动工程模式流程分析。

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
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值