Android 12.0 システム Launcher3 でスクリーンショット API を呼び出すと常に null が返される問題の解決策

1。概要

12.0 システム ROM 製品の開発中、Launcher3 の開発中、ある時点でスクリーンショット インターフェイスを呼び出してスクリーンショット機能を実装する必要があります。Launcher3 では、システム スクリーンショットを作成するときに、スクリーンショットを撮るためにインターフェイス SurfaceControl.screenshot が呼び出されます。常に null、
システムの現在のページのスクリーンショット機能を取得できないため、現在のスクリーンショットが失敗する理由を見つけて、次に、スクリーンショット機能を実現します。スクリーンショットを撮るプロセスを分析して解決しましょう。 質問

2. Launcher3のスクリーンショット関数を呼び出すと常にnullを返すソリューションのコアクラスについて

frameworks\native\services\surfaceflinger\SurfaceFlinger.cpp

3. Launcher3 でスクリーンショット関数を呼び出すと常に null を返すソリューションのコア関数の分析と実装

SurfaceFlinger は、Surface の確立、制御、管理を実装し、ディスプレイ表示チャネルを作成し、GraphicBuffer アプリケーションの回転を制御し、Vsync イベントに基づいて同期するシステム サービスです。
 管理者は次のことを行う必要があります。ディスプレイに参加する サーフェスは、HWComposer ハードウェア オーバーレイを画面上にオーバーレイします。
アプリケーションの各ウィンドウはサーフェスに関連付けられ、サーフェスは実際のグラフィック バッファのバッファ キューに関連付けられます。 Android 描画用の API は多数あります。
2D 描画 Skia、サーフェス上に描画される 3D 描画 OpenGL、Vulkan など

3.1 スクリーンショットを呼び出す関連メソッド

Android のスクリーンショットには、表示スクリーンショット、WebView スクリーンショット、システム スクリーンショット、adb スクリーンショットの 4 種類があります。
まず、コマンドを通じて呼び出すことができるスクリーンショット関数を見てみましょう。アプリ開発
スクリーンキャップを使用してスクリーンショットを実装します。スクリーンショット API を呼び出してスクリーンショットを実装することもできます。次に、関連するスクリーンショット API を呼び出してスクリーンショット関数を実装する方法を見てみましょう。次に、

おすすめ

転載: blog.csdn.net/baidu_41666295/article/details/134818328