进程的Android InputStream吞下最后一个字节

时间:2012-01-30 13:00:05

标签: android events touch inputstream

我有一个扎根的Android 4.0手机,需要收听系统范围的触控事件。执行 getevent -t -l / dev / input / event1 在终端的adb shell中产生以下单击结果,我将其解析为向下,移动和向上事件:

  

51443-343322:EV_ABS ABS_MT_TRACKING_ID 000001f2
  51443-343322:EV_ABS ABS_MT_TOUCH_MAJOR 0000000d
  51443-343352:EV_ABS ABS_MT_PRESSURE 00000073
  51443-343352:EV_ABS ABS_MT_POSITION_X 00000077
  51443-343352:EV_ABS ABS_MT_POSITION_Y 000001b6
  51443-343383:EV_SYN SYN_REPORT 00000000
  51443-453887:EV_ABS ABS_MT_TOUCH_MAJOR 0000000e
  51443-453887:EV_ABS ABS_MT_PRESSURE 0000005a
  51443-453918:EV_ABS ABS_MT_POSITION_X 00000076
  51443-453918:EV_ABS ABS_MT_POSITION_Y 000001b4
  51443-453918:EV_SYN SYN_REPORT 00000000
   51443-462462:EV_ABS ABS_MT_TRACKING_ID ffffffff
  51443-462462:EV_SYN SYN_REPORT 00000000

(粗体是补漆事件)

然而,当我想从Android服务中使用时     


    new Thread(new Runnable() {
        @Override
        public void run() {
            Process sh = Runtime.getRuntime().exec(new String[] {"su", "-c", "getevent -t -l /dev/input/event1"});
            BufferedReader r = new BufferedReader(new InputStreamReader(sh.getInputStream()));
            String line;
            while(shouldrun) {
                while ((line = r.readLine())!=null) {
                    handleLinuxEvent(line);
                }
                Thread.yield();
            }
            r.close();
            sh.destroy();
        }
    }).start();
    
最后~150个字节似乎总是迷路(包括重要的补漆事件)。输出例如是

  

51443-343322:EV_ABS ABS_MT_TRACKING_ID 000001f2
  51443-343322:EV_ABS ABS_MT_TOUCH_MAJOR 0000000d
  51443-343352:EV_ABS ABS_MT_PRESSURE 00000073
  51443-343352:EV_ABS ABS_MT_POSITION_X 00000077
  51443-343352:EV_ABS ABS_MT_POSITION_Y 000001b6
  51443-343383:EV_SYN SYN_REPORT 00000000
  51443-453887:EV_ABS ABS_MT_TOUCH_MAJOR 0000000e
  51443-453887:EV_ABS ABS_MT_PRESSURE 0000005a
  51443-453918:EV_ABS ABS_MT_POSITION_X 00000076
  51443-453918:EV_ABS ABS_MT_POSITION_Y 000001b4
  51443-453918:EV_SYN SYN_REPORT 000

知道为什么吗?我已经尝试过缓冲/非缓冲流和不同的缓冲区大小。我还阅读了有关Android冻结套接字InputStreams的其他已知问题,但找不到解决方案。

0 个答案:

没有答案