我正在使用模拟器。所以我肯定有root权限。 我用命令:
adb pull /dev/graphics/fb0 d:/a
然后使用我的程序读取此文件并生成一个bmp。它很成功。但是当我使用纯java代码执行此操作时:
Process process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0");
process.waitFor();
InputStream is = process.getInputStream();
is.read(buffer, 0, width*height*2);
缓冲区无法获取正确的数据。所有数据都是0,而前几行的正确值是0xFF。
然后我尝试了:
adb shell
cat /dev/graphics/fb0 > /sdcard/tmp
tmp文件也获得了正确的数据。 为什么纯Java代码失败了?我使用Process类的方式是错误的吗?
答案 0 :(得分:1)
由于fb0是一个缓冲区文件,它是一个永远在变化的文件,你应该将它复制到某个可访问的目的地,然后用FileInputStream
读取它,轻松获得正确的数据。
像:
("cat /dev/graphics/fb0 > /dev/myRawFrame.raw");
File CurrentRawFile = new File("/dev/myRawFrame.raw");
你已经完成了:)