隨筆-1  評(píng)論-68  文章-98  trackbacks-0

          待機(jī)/主屏界面輸入數(shù)字1~9后跳轉(zhuǎn)到了聯(lián)系人界面。
           
          待機(jī)規(guī)則:如果輸入的是0~9或者+*#,會(huì)切換到撥號(hào)界面;輸入其它字符,則切換到聯(lián)系人界面。
          原因分析:模擬器輸入1~9,看到的是1~9;手機(jī)鍵盤(pán)輸入1~9,實(shí)際輸入的是.adgj...。可以在寫(xiě)信窗口驗(yàn)證鍵盤(pán)輸入。
          解決方法:在待機(jī)程序中添加keyCode的處理,如果keyCode的值是KeyEvent.KEYCODE_0~KEYCODE_9或者KeyEvent.KEYCODE_STAR、KeyEvent.KEYCODE_POUND、KeyEvent.KEYCODE_PLUS,轉(zhuǎn)換成對(duì)應(yīng)的是0~9或者+*#,其它流程不變。另外,模擬器的*和#的keyCode值與10個(gè)數(shù)字的keyCode值重疊(電腦鍵盤(pán)傳輸造成的,手機(jī)鍵盤(pán)不存在這個(gè)問(wèn)題),這塊也需要作特殊處理。
          代碼如下:

          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;
               }
              }
          ……
          }


          本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/netpirate/archive/2009/06/26/4300157.aspx

          posted on 2009-08-29 23:29 Xu Jianxiang 閱讀(530) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Android
          主站蜘蛛池模板: 西安市| 霍山县| 双柏县| 成安县| 杂多县| 吉林省| 都江堰市| 嘉鱼县| 水富县| 竹北市| 双辽市| 天镇县| 葫芦岛市| 和龙市| 平罗县| 宁强县| 库尔勒市| 陇西县| 磐石市| 新营市| 巫溪县| 淄博市| 馆陶县| 海丰县| 磐石市| 布尔津县| 东莞市| 桓台县| 兰州市| 汶川县| 景洪市| 星子县| 鸡泽县| 汝南县| 天祝| 昌平区| 舒城县| 惠安县| 慈利县| 砚山县| 台北市|