<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-1  評論-68  文章-98  trackbacks-0

    待機/主屏界面輸入數字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;
         }
        }
    ……
    }


    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/netpirate/archive/2009/06/26/4300157.aspx

    posted on 2009-08-29 23:29 Xu Jianxiang 閱讀(528) 評論(0)  編輯  收藏 所屬分類: Android
    主站蜘蛛池模板: 精品亚洲麻豆1区2区3区| 高清在线亚洲精品国产二区| 亚洲无人区码一二三码区别图片 | 亚洲一级视频在线观看| 99精品视频在线视频免费观看 | 永久看日本大片免费35分钟| 亚洲视频免费观看| 在线观看亚洲免费视频| 在线观看91精品国产不卡免费| 春暖花开亚洲性无区一区二区| 免费又黄又硬又爽大片| sss在线观看免费高清| 国产AV无码专区亚洲精品| 久久青草精品38国产免费| 亚洲国产日韩在线| 日韩毛片免费无码无毒视频观看| 亚洲精品亚洲人成在线| av在线亚洲欧洲日产一区二区| 中文字幕a∨在线乱码免费看 | 一个人免费高清在线观看| 亚洲人成无码久久电影网站| 国产精品hd免费观看| 久久精品国产亚洲av水果派| 毛片免费在线播放| xxxxx做受大片视频免费| 亚洲精品视频在线| 免费鲁丝片一级在线观看| 五级黄18以上免费看| 亚洲国产精品久久久久久| 成人免费视频一区| 国产免费一级高清淫曰本片 | 国产精品久久亚洲一区二区| 亚洲人成亚洲人成在线观看 | 亚洲精品高清国产麻豆专区| aa级毛片毛片免费观看久| 中文字幕亚洲第一在线| 国产一级淫片免费播放电影| 老汉精品免费AV在线播放| 羞羞漫画小舞被黄漫免费| 亚洲国产精品久久久久婷婷软件| 影音先锋在线免费观看|