Dialer设置按键进入拨号盘--源码分析

简介: 笔记

setDefaultKeyMode (int mode)用来设置一个Activity的默认的按键模式,

也就是指这种情况,当Activity中发生了一些按键事件,但是这些事件没有被任何控件Listen到时(截获时),系统应该如何处理这些按键事件。

mode一共有五种

  • DEFAULT_KEYS_DISABLE
  • DEFAULT_KEYS_DIALER
  • DEFAULT_KEYS_SHORTCUT
  • DEFAULT_KEYS_SEARCH_LOCAL
  • DEFAULT_KEYS_SEARCH_GLOBAL

今天看一下源码是如何处理的。


1、首先fsetDefaultKeyMode 定义在Activity.java中


public final void setDefaultKeyMode(@DefaultKeyMode int mode) {
         mDefaultKeyMode = mode;
         // Some modes use a SpannableStringBuilder to track & dispatch input events
         // This list must remain in sync with the switch in onKeyDown()
         switch (mode) {
         case DEFAULT_KEYS_DISABLE:
         case DEFAULT_KEYS_SHORTCUT:
             mDefaultKeySsb = null;      // not used in these modes
             break;
         case DEFAULT_KEYS_DIALER:
         case DEFAULT_KEYS_SEARCH_LOCAL:
         case DEFAULT_KEYS_SEARCH_GLOBAL:
             mDefaultKeySsb = new SpannableStringBuilder();
             Selection.setSelection(mDefaultKeySsb,0);
             break;
         default:
             throw new IllegalArgumentException();
         }
     }

如果是DEFAULT_KEYS_DIALER模式,就用SpannableStringBuilder来记录按下的字符。


2、依然在Activity.java中,处理按键onKeyDown方法


public boolean onKeyDown(int keyCode, KeyEvent event)  {
        ...
           switch (mDefaultKeyMode) {
           case DEFAULT_KEYS_DIALER:
               Intent intent = new Intent(Intent.ACTION_DIAL,  Uri.parse("tel:" + str));
               intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
               startActivity(intent);
               break;
      ....
    }

通过 ACTION_DIAL启动到拨号盘,并把SpannableStringBuilder记录的字符串作为号码传入


3、拨号盘在Dialer中,DialpadFragment.java


onResume 调用-->configureScreenFromIntent(getActivity().getIntent())
-->fillDigitsIfNecessary(intent)-->setFormattedDigits


目录
相关文章
|
11月前
|
存储 Cloud Native Linux
C++Qt防止程序重复启动
C++Qt防止程序重复启动
|
5月前
LabVIEW以编程方式将VI控件值重置为默认值
LabVIEW以编程方式将VI控件值重置为默认值
276 2
|
5月前
win32编程 -- 鼠标消息
win32编程 -- 鼠标消息
28 0
|
5月前
win32编程 -- 窗口注册与创建
win32编程 -- 窗口注册与创建
41 0
|
5月前
|
JavaScript 前端开发 Java
若依框架---选中某值 其他值自动回调填充
若依框架---选中某值 其他值自动回调填充
168 0
|
物联网
如何实现按键的短按、长按检测?
如何实现按键的短按、长按检测?
|
调度
按键演示休眠与唤醒场景--基于IMX6ULL
按键演示休眠与唤醒场景--基于IMX6ULL
134 0
按键演示休眠与唤醒场景--基于IMX6ULL
|
物联网 开发者
按键中断演示|学习笔记
快速学习按键中断演示
112 0
按键中断演示|学习笔记
|
JavaScript 开发者
组件切换-应用切换动画和 mode 方式|学习笔记
快速学习组件切换-应用切换动画和 mode 方式
119 0
组件切换-应用切换动画和 mode 方式|学习笔记