我是一个初学者,在刚接触屏幕截图这个需求时,我是惯性地百度了一下,果不其然,相关的资料汗牛充栋。在这里,我向读者提供一个链接,是关于androi屏幕截图的相关资料的。http://blog.csdn.net/woshinia/article/details/11520403。在初略的研读玩这篇博客后,习惯性地进行实践操作,但结果却没有一例能够满足相关需求的。自然抱怨是少不了的。就比如开案例一:利用activity的绘画缓存获取屏幕图像,很遗憾,该办法既不能截获通知栏的图像,更只能局限在本应用的activity上。于是,我又转向模拟物理按键调用系统截图事件去进行截图。可惜弄了很久还是没办法模拟长按电源键事件。至于在其他的方法,我也一一尝试,最终都没办法实现,里面的案例总是缺胳膊缺腿的。
后来在一位前辈的指导下,我得到了这样一种截屏的方法,调用系统命令进行截图
Process sh = Runtime.getRuntime().exec("su", null,null); OutputStream os = sh.getOutputStream(); os.write(("/system/bin/screencap p " + "/sdcard/img.png").getBytes("ASCII")); os.flush(); os.close(); sh.waitFor();
截图是能够截图了,但问题又来了,截出来的图显示一段Toast,提示语。这不是大煞风景吗?由于获取root权限紧接着就是截图了,看来这种情况我可避免了。但问题总是要解决的。后来我灵光一动,想,能不能我在启动截屏事件之前调用获取root'权限呢。如果这样的话,可以等到提示语消失后再进行截图操作了。一试,果然灵。有时候我觉得,编写程序的过程就像解方程的解一样。如果要引用我们为所见闻的方式去解决问题的去很困难,但如果恰当使用各个数间的关系,就可以惊人的效果