Tire uma foto usando um serviço no OnePlus One - usando o WindowManager hack

Estou tentando tirar uma foto sem mostrar nada ao usuário (sem exibição) por meio de um serviço. Esta pergunta já foi feita várias vezes e eu já passei por tudo o que pude encontrar. Algumas perguntas semelhantes:

Falha no Android Camera.takePicture

A câmera do Android falha ao tirar uma foto do serviço em segundo plano

A maioria das perguntas está vinculada a outras perguntas sem fornecer uma nova solução.

Eu acredito que esta é a melhor maneira de resolver este problema:https://stackoverflow.com/a/10268650/3860594 Infelizmente, a pessoa não forneceu uma resposta completa e estou tendo problemas para reproduzir seu método.

O que estou tentando fazer é criar um SurfaceView dentro de um SurfaceHolder. Vou usar o WindowManager com o SurfaceView para criar uma espécie de janela flutuante que é completamente transparente para ocultar o usuário. Por favor me corrija se eu estiver errado.

Aqui está o meu código:

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();
}

Nada disso funciona como a mensagem usualRuntimeException: takePicture failed é mostrado. Qualquer ajuda seria incrível, obrigado.

questionAnswers(1)

yourAnswerToTheQuestion