3

私はアンドロイドを使用してVirtual 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は、仮想ディスプレイを裏打ちする面に関連しています。

メディア プロジェクションを再度開始するときに、使用可能なディスプレイが繰り返されると、以前に作成された仮想ディスプレイが使用可能なディスプレイの 1 つとしてリストされたままになります。

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