3

我正在使用androidVirtual Display以及Projection Manager 在某些时候,需要停止投影,因此采取了以下操作

@Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mMediaProjection.stop();
        Log.e(TAG, "mMediaProjection.stopped ");
        mVirtualDisplay.release();
        Log.e(TAG, "virtual display.released ");
    }

surfaceDestroyed与支持虚拟显示器的表面有关。

当需要再次启动 Media Projection 时,如果迭代可用的显示器,之前创建的虚拟显示器仍列为可用显示器之一

DisplayManager disp = (DisplayManager) getSystemService(DISPLAY_SERVICE);
        Display[] allDisplays = disp.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
        Log.e(TAG+"-Display", "Display Count  "+allDisplays.length);
        for(Display dl : allDisplays){
            Log.e(TAG+"-Display", "Display name " + dl.getName()+" Display id "+dl.getDisplayId());
        }

如何正确处理虚拟显示的创建和删除?

笔记 :

以下是媒体投影和虚拟显示设置的片段

mMediaProjection = mMediaProjectionManager.getMediaProjection(mResultCode, mResultData);
mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",
                mSurfaceView.getWidth(), mSurfaceView.getHeight(), mScreenDensity,
                 DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC | DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR |DisplayManager.VIRTUAL_DISPLAY_FLAG_PRESENTATION,
                mSurface, null, null);
4

0 回答 0