阅读:6621回复:3

C++代码读取xml文件

楼主#
更多 发布于:2019-09-28 09:54
我想在 framework/native/service/inputflinger/InputReader.cpp 文件里读取一个xml文件
/data/data/com.google.android.inputmethod.korean/shared_prefs/com.google.android.inputmethod.korean_preferences.xml
获取里面这一组数据:<string name="ACTIVE_LANGUAGE_URI">en</string>

不知道C++代码里面应该怎么样读取xml文件
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
沙发#
发布于:2019-09-28 10:11
这个问题说起来也是有点麻烦,简单来说就是我们客户想用无线飞鼠,上面有全键盘,还有一个英文韩文切换键,客户希望,飞鼠键盘可以切换英文韩文输入。软键盘虽然可以响应到切换键,但是26个字母键输入的始终是a b c d的字母,所以我们在frameworks/native/services/inputflinger/InputReader.cpp里面监听到切换键,强行修改26个字母键的码值,让它们能够发送韩文元音的Unicode

bool change_button_flags = true;
struct Change_keycod_table {
    int32_t code;
    int32_t key_value;
};
struct Change_keycod_table Keyboard_keycod_table[] = {
 {0x001e, 748},//a
 {0x0030, 749},//b
 {0x002e, 750},//c
 {0x0020, 751},//d
 {0x0012, 752},//e
 {0x0021, 753},//f
 {0x0022, 754},//g
 {0x0023, 755},//h
 {0x0017, 756},//i
 {0x0024, 757},//j
 {0x0025, 758},//k
 {0x0026, 759},//l
 {0x0032, 760},//m
 {0x0031, 761},//n
 {0x0018, 762},//o
 {0x0019, 763},//p
 {0x0010, 764},//q
 {0x0013, 765},//r
 {0x001f, 766},//s
 {0x0014, 767},//t
 {0x0016, 768},//u
 {0x002f, 769},//v
 {0x0011, 770},//w
 {0x002d, 771},//x
 {0x0015, 772},//y
 {0x002c, 773},//z
};
void KeyboardInputMapper::process(const RawEvent* rawEvent) {
    switch (rawEvent->type) {
    case EV_KEY: {
        int32_t scanCode = rawEvent->code;
        int32_t usageCode = mCurrentHidUsage;
        int32_t i=0;
        mCurrentHidUsage = 0;
       if((rawEvent->code==0x007a)&&(rawEvent->value)){/*这里是切换键的keycode*/
         //rawEvent->code = 16;
         change_button_flags = !change_button_flags;
        }
        
        if(change_button_flags){//这里为true就会改掉字母键的keycode
         for (i = 0; i < 26; i++){
         if (Keyboard_keycod_table.code == rawEvent->code){
             scanCode = Keyboard_keycod_table.key_value;
         }
      }
        }
这样是可以实现飞鼠键盘输入韩文,而且可以英文韩文切换,我们是用一个 bool change_button_flags = true;
每次按切换键,取反来实现26字母键keyCode切换的, 这样就会造成和google韩文输入法软键盘的英文韩文不同步,所以我想读取软键盘的这个文件/data/data/com.google.android.inputmethod.korean/shared_prefs/com.google.android.inputmethod.korean_preferences.xml
通过这个字段:

<string name="ACTIVE_LANGUAGE_URI">en</string>
<string name="ACTIVE_LANGUAGE_URI">ko</string>
来获取软键盘当前是英文还是韩文,来给change_button_flags赋值。
这个想法应该是可以行的通的,就是不知道应该怎么在C++的代码里面读取这个xml文件
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
板凳#
发布于:2019-09-29 16:51
C++的语法不熟啊,解析XML文件的方法百度了很多地方,试了好多方法,各种报错搞不定。最后没办法,在PhoneWindowManager.java里面,用java的Pull 解析,然后吧结果写到SystemProperty里面,在Native层获取property_get。但是还是在native层C++直接解析还是最好的
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
地板#
发布于:2019-09-29 21:08
zhaoyf13:C++的语法不熟啊,解析XML文件的方法百度了很多地方,试了好多方法,各种报错搞不定。最后没办法,在PhoneWindowManager.java里面,用java的Pull 解析,然后吧结果写到SystemProperty里面,在Nativ...回到原帖
你挺牛的。  功能实现了。不错啊
If you have nothing to lose, then you can do anything.
游客

返回顶部