我实现了一个名为RemoteInput的输入法,只是简单地扩展了InputMethodService,没有InputViews和键盘。当用户选择RemoteInput作为默认IME时,RemoteInput将发送当前输入状态到其他设备,用户可以远程执行输入操作(使用我们定制的协议)。当输入完成时,在其他设备中输入的文本将被发送回当前设备,然后RemoteInput使用InputConnection.commitText (CharSequence text, int newCursorPosition)
将文本提交到当前UI组件(如EditText)。
当远程输入的文本是英文字符和数字时,它工作得很好,但是当涉及到其他字符时,事情就会出错。我发现InputConnection.commitText
过滤了其他字符。例如,我输入了hello你好
,只有hello
提交成功。和更多:
-
hello world
==>helloworld
-
hello,world!!
==>helloworld
你告诉我的任何事情都会很有帮助的,提前谢谢你。
下面是我的代码:public class RemoteInput extends InputMethodService {
protected static String TAG = "RemoteInput";
public static final String ACTION_INPUT_REQUEST = "com.aidufei.remoteInput.inputRequest";
public static final String ACTION_INPUT_DONE = "com.aidufei.remoteInput.inputDone";
private BroadcastReceiver mInputReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_INPUT_DONE.equals(intent.getAction())) {
String text = intent.getStringExtra("text");
Log.d(TAG, "broadcast ACTION_INPUT_DONE, input text: " + text);
input(text);
}
}
};
@Override
public void onCreate() {
super.onCreate();
registerReceiver(mInputReceiver, new IntentFilter(ACTION_INPUT_DONE));
}
@Override
public View onCreateInputView() {
//return getLayoutInflater().inflate(R.layout.input, null);
return null;
}
@Override
public boolean onShowInputRequested(int flags, boolean configChange) {
if (InputMethod.SHOW_EXPLICIT == flags) {
Intent intent = new Intent(ACTION_INPUT_REQUEST);
getCurrentInputConnection().performContextMenuAction(android.R.id.selectAll);
CharSequence text = getCurrentInputConnection().getSelectedText(0);
intent.putExtra("text", text==null ? "" : text.toString());
sendBroadcast(intent);
}
return false;
}
public void input(String text) {
InputConnection inputConn = getCurrentInputConnection();
if (text != null) {
inputConn.deleteSurroundingText(100, 100);
inputConn.commitText(text, text.length());
}
//inputConn.performEditorAction(EditorInfo.IME_ACTION_DONE);
}
@Override
public void onDestroy() {
unregisterReceiver(mInputReceiver);
super.onDestroy();
}
}
如果您使用英语以外的语言,则需要使用Unicode。你需要将你的Unicode字体附加到你的项目,并将元素的字体(例如EditText)设置为你附加的字体。查看以下内容,了解如何在应用程序中添加自定义字体。
http://tharindudassanayake.wordpress.com/2012/02/25/use-sinhala-fonts-for-your-android-app/第二个选择是root你的设备并安装所需的字体。