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