您的位置:首页 > 移动开发

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

2009-06-26 11:25 218 查看
待机/主屏界面输入数字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;
}
}
……
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐