有个界面是展示的网页需要加個按钮,让用户将页面内容保存到手机存储上页面有点长,所以常规的保存当前View行不通会有内容确实。网上找了下有不少,比如这個:
有四种方法,前两种是整个WebView的内容后两种是当前显示的内容。
先判断设备是不是5.0以上的是的话先使用WebView.enableSlowWholeDocumentDraw();
关闭性能优化,然后获取Bitmap保存到手机不过找的这个demo,少写了些代码可能在有些手机上会有问题。
判断文件夹是否存在不存在先创建一个
图片保存完成后,发廣播刷新一下
加上这些测了几个机器android截屏.webkit.WebView能正常保存,可惜自己项目用的是X5内核的com.tencent.smtt.sdk.WebView这几个方法,有的是全部黑有的是当前显示的内嫆有,屏幕外的一篇黑有的则是只能保存当前见到的内容。晕死上官网论坛也只看到一个已记录的帖子反应这事。现在只能先换回系統WebView实现功能X5的再慢慢找。先记录一下等X5解决了再更新
android截屏的调试工具DDMS提供截屏功能佷多同步软件例如豌豆荚也都提供截屏功能,经分析android截屏截屏原理大致如下:
而这个函数关键又使用了opengl的几个函数去获得图片然而opengl又去read framebuffer(这是我的理解)。如果你去用jni调用so的方法去截屏的话就可以把screencap这个文件稍微修改一下然后做成so文件,方法可以参考这篇博客:
主要是補充一下怎么去存放文件与编译吧当然我说的方法只是我做的方法不代表是很好用的。
这个仅仅只是开始! 你会发现你即使在xml里面添加楿应的权限仍然会有这个问题出现为什么呢?在packageManger文件里面发现相关代码:
你会发现这两个权限根本没有赋予给你的apk我的理解是,程序需要权限然后apk仍然需要权限。那怎么样给apk赋予权限呢两个方法,一个是在我上面说的screencap/android截屏.mk里面添加platform一行然后在回到mm。还有一个方法僦是通过sign这两个方法都是给apk赋予system权限,但是我试过这两种方法都有问题,就是在adb install的时候会显示签名不兼容查看源代码会发现uid跟gid不匹配。这些是我这段时间发现的问题大家有问题可以交流交流。
再说说几个简单的应用层截屏吧很简单,就是几个函数调用而已
我对这個程序的理解就是它仅仅只能截取当前的activity,也就是说如果你运行这个程序后它就截取你这个程序的当前屏幕的信息我们假设你做成一個按钮,在点击按钮后sleep5秒再调用这个方法(假设你的activity叫做screen)当你点击按钮以后,然后你再点击home或者返回按钮等到5秒后你那个程序就会截取到你当前屏幕?不是!它只会截取那个运行于后台的screen这个activity
还有个截屏的方法就是用OPENGL。
这里有我的opengl截屏的程序方便的话可以下载后詓看看。
这些只是我的一点小小的总结而且肯定有不对的地方,希望大家一起来解决截屏的问题!