我正在使用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);