Launcher App:待机/主屏界面输入数字1~9后跳转到了联系人界面,没有跳转到拨号界面

待机/主屏界面输入数字1~9后跳转到了联系人界面。
 
待机规则:如果输入的是0~9或者+*#,会切换到拨号界面;输入其它字符,则切换到联系人界面。
原因分析:模拟器输入 1~9,看到的是1~9;手机键盘输入1~9,实际输入的是.adgj...。可以在写信窗口验证键盘输入。
解决方法:在待机程序中添加keyCode的处理,如果keyCode的值是KeyEvent.KEYCODE_0~KEYCODE_9或者KeyEvent.KEYCODE_STAR、KeyEvent.KEYCODE_POUND、KeyEvent.KEYCODE_PLUS,转换成对应的是0~9或者+*#,其它流程不变。 另外,模拟器的*和#的keyCode值与10个数字的keyCode值重叠(电脑键盘传输造成的,手机键盘不存在这个问题),这块也需要作特殊处理。
代码如下:

public final class com.android.launcher.Launcher
{
……

    public final static String KEY_STAR  = "*";
    public final static String KEY_POUND = "#";
    public final static String KEY_PLUS  = "+";
   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        boolean handled = super.onKeyDown(keyCode, event);
        if (!handled && keyCode != KeyEvent.KEYCODE_ENTER) {
            boolean gotKey = TextKeyListener.getInstance().onKeyDown(mWorkspace, mDefaultKeySsb,
                    keyCode, event);
            if (gotKey && mDefaultKeySsb != null && mDefaultKeySsb.length() > 0) {
                // something usable has been typed - dispatch it now.
                String str = mDefaultKeySsb.toString();
                boolean isDialable = true;
                //for emunlator
             if ( keyCode >= KeyEvent.KEYCODE_0 && keyCode<= KeyEvent.KEYCODE_9 )
             {
              if ( ! KEY_STAR.equals( str ) && ! KEY_POUND.equals( str ) )
              {//for emulator
               str = String.valueOf( keyCode2Value(keyCode) );
              }
             }
             else if ( keyCode == KeyEvent.KEYCODE_STAR )
                {
              str = KEY_STAR;
                }
             else if ( keyCode == KeyEvent.KEYCODE_POUND )
                {
              str = KEY_POUND;
                }
             else if ( keyCode == KeyEvent.KEYCODE_PLUS )
                {
              str = KEY_PLUS;
                }
             else
             {
                 final int count = str.length();
                 for (int i = 0; i < count; i++)
                 {
                     if (!PhoneNumberUtils.isReallyDialable(str.charAt(i)))
                     {
                         isDialable = false;
                         break;
                     }
                 }
             }
                Intent intent;
                if (isDialable) {
                    intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", str, null));
                } else {
                    intent = new Intent(Contacts.Intents.UI.FILTER_CONTACTS_ACTION);
                    intent.putExtra(Contacts.Intents.UI.FILTER_TEXT_EXTRA_KEY, str);
                }
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                try {
                    startActivity(intent);
                } catch (android.content.ActivityNotFoundException ex) {
                    // Oh well... no one knows how to filter/dial. Life goes on.
                }
                mDefaultKeySsb.clear();
                mDefaultKeySsb.clearSpans();
                Selection.setSelection(mDefaultKeySsb, 0);
                return true;
            }
        }
        return handled;
    }
   
    private int keyCode2Value( int keyCode )
    {
     switch ( keyCode )
     {
      case KeyEvent.KEYCODE_0:
       return ToneGenerator.TONE_DTMF_0;
       
      case KeyEvent.KEYCODE_1:
       return ToneGenerator.TONE_DTMF_1;
       
      case KeyEvent.KEYCODE_2:
       return ToneGenerator.TONE_DTMF_2;
       
      case KeyEvent.KEYCODE_3:
       return ToneGenerator.TONE_DTMF_3;
       
      case KeyEvent.KEYCODE_4:
       return ToneGenerator.TONE_DTMF_4;
       
      case KeyEvent.KEYCODE_5:
       return ToneGenerator.TONE_DTMF_5;
       
      case KeyEvent.KEYCODE_6:
       return ToneGenerator.TONE_DTMF_6;
       
      case KeyEvent.KEYCODE_7:
       return ToneGenerator.TONE_DTMF_7;
       
      case KeyEvent.KEYCODE_8:
       return ToneGenerator.TONE_DTMF_8;
       
      case KeyEvent.KEYCODE_9:
       return ToneGenerator.TONE_DTMF_9;
      case KeyEvent.KEYCODE_STAR://*
       return ToneGenerator.TONE_DTMF_P;
       
      case KeyEvent.KEYCODE_POUND://#
       return ToneGenerator.TONE_DTMF_S;
       
      case KeyEvent.KEYCODE_PLUS://+
//       return ToneGenerator.;
      
      default:
       return 0;
     }
    }
……
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值