我正在使用模拟器。所以我肯定有root权限。 我使用命令:
adb pull/dev/graphics/fb0 d:/a
然后用我的程序读取这个文件并生成一个bmp。它是成功的。但是当我使用纯 Java 代码来执行此操作时:
Process process = Runtime.getRuntime().exec("su -c cat/dev/graphics/fb0");
process.waitFor();
InputStream = process.getInputStream();
is.read(buffer, 0, width*height*2);
缓冲区无法获取正确的数据。所有数据都是0,正确的是前几行0xFF。
然后我尝试了:
adb shell
cat/dev/graphics/fb0 >/sdcard/tmp
tmp 文件也得到了正确的数据。 为什么纯java代码失败了?是我使用 Process 类的方式不对吗?
最佳答案
由于 fb0 是一个缓冲文件,它是一个不断变化的文件,您应该将其复制到某个可访问的目的地,然后使用 FileInputStream
读取它,轻松获得正确的数据。
喜欢:
("cat /dev/graphics/fb0 > /dev/myRawFrame.raw");
File CurrentRawFile = new File("/dev/myRawFrame.raw");
大功告成:)
关于android - 为什么我不能从/dev/graphics/fb0 读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356503/