android-在OnePlus One上使用服务拍照-使用WindowManager hack

android-在OnePlus One上使用服务拍照-使用WindowManager hack,第1张

概述我正在尝试拍照,但不会通过服务向用户显示任何内容(无视图).这个问题已经被问过几次了,我已经找到了所有的答案.一些类似的问题:>AndroidCamera.takePicturefailed>Androidcamerafailstotakephotofrombackgroundservice大多数问题都链接到其他问题,而没有提供新的解

我正在尝试拍照,但不会通过服务向用户显示任何内容(无视图).这个问题已经被问过几次了,我已经找到了所有的答案.一些类似的问题:

> 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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1120433.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存