
我正在尝试拍照,但不会通过服务向用户显示任何内容(无视图).这个问题已经被问过几次了,我已经找到了所有的答案.一些类似的问题:
> Android Camera.takePicture failed
> Android camera fails to take photo from background service
大多数问题都链接到其他问题,而没有提供新的解决方案.
我相信这是解决此问题的最佳方法:https://stackoverflow.com/a/10268650/3860594
不幸的是,这个人没有提供完整的答案,我在重现他的方法时遇到了麻烦.
我想做的是在SurfaceHolder中创建一个SurfaceVIEw.然后,我将WindowManager与SurfaceVIEw一起使用,以创建一个完全透明的浮动窗口,以便对用户隐藏.如果我错了,请纠正我.
这是我的代码:
SurfaceVIEw mvIEw = new SurfaceVIEw(this);SurfaceHolder mholder = new SurfaceHolder() { @OverrIDe public voID addCallback(Callback callback) { } @OverrIDe public voID removeCallback(Callback callback) { } @OverrIDe public boolean isCreating() { return false; } @OverrIDe public voID setType(int type) { } @OverrIDe public voID setFixedSize(int wIDth, int height) { } @OverrIDe public voID setSizefromLayout() { } @OverrIDe public voID setFormat(int format) { } @OverrIDe public voID setKeepScreenOn(boolean screenOn) { } @OverrIDe public Canvas lockCanvas() { return null; } @OverrIDe public Canvas lockCanvas(Rect dirty) { return null; } @OverrIDe public voID unlockCanvasAndPost(Canvas canvas) { } @OverrIDe public Rect getSurfaceFrame() { return null; } @OverrIDe public Surface getSurface() { return null; }};WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYstem_OVERLAY, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_touch, PixelFormat.TRANSLUCENT);wm.addVIEw(mvIEw, params);mvIEw.setZOrderOntop(true);mholder.setFormat(PixelFormat.transparent);try { camera.setPrevIEwdisplay(mvIEw.getHolder()); camera.startPrevIEw(); camera.takePicture(null,null,photoCallback);} catch (IOException e) { // Todo auto-generated catch block e.printstacktrace();}这些都不能像通常的消息RuntimeException:takePicture Failed那样显示.任何帮助都会很棒,谢谢.
解决方法:
碰巧发生了,难题中的最后一块砖块仅在问了问题一周后才露出来.该问题特定于特定设备,即OnePlus One.
https://github.com/alexcohn/CameraInService处的示例代码显示了如何进行处理;最新的提交在开始预览和执行takePicture()之间增加了延迟.我妻子的OnePlus One上的实验表明,100毫秒的延迟还可以,但是1毫秒太短了.
总结以上是内存溢出为你收集整理的android-在OnePlus One上使用服务拍照-使用WindowManager hack全部内容,希望文章能够帮你解决android-在OnePlus One上使用服务拍照-使用WindowManager hack所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)