为什么我不能从/ dev / graphics / fb0读取数据?

时间:2011-09-09 02:18:14

标签: android screen snapshot

我正在使用模拟器。所以我肯定有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类的方式是错误的吗?

1 个答案:

答案 0 :(得分:1)

由于fb0是一个缓冲区文件,它是一个永远在变化的文件,你应该将它复制到某个可访问的目的地,然后用FileInputStream读取它,轻松获得正确的数据。

像:

("cat /dev/graphics/fb0 > /dev/myRawFrame.raw");

File CurrentRawFile = new File("/dev/myRawFrame.raw");

你已经完成了:)