2011-07-20 5 views
13

私のアプリのディスプレイのスクリーンショットを撮るために、いくつかの "onXXXXX"コールバックメソッドまたはブロードキャストを検出する方法があるかどうかは疑問でした。たとえば、SDKツールや他のスクリーンキャプチャアプリケーションが「スクリーンキャプチャ」を実行している場合は、通知を受け、スクリーンキャプチャを許可するかどうかを決定したいと思います。Androidアプリでの画面キャプチャを防止する

これが不可能な場合は、ディスプレイをロックして他のプロセスが自分のディスプレイをキャプチャすることはできません。

答えて

5

Androidで別のアプリのスクリーンショットを撮るにはno supported methodがあります。唯一の方法は、ルーティングまたはSDKの使用です。どちらも、通知をブロックするか、通知を受け取る機会はほとんどありません。別のアプリがスクリーンショットを撮る場合、デフォルトではサポートされていない方法を使用しています。

私はあなたのアプリを保護するために利用可能な方法を使用してはならないことを暗示しているわけではないことを明確にしたいと思います。サポートされていないメソッドを使用しないと、おそらくそれを行うことは不可能であり、それらを使用しても、スクリーンショットに対して100%安全ではない可能性があることを知らせています。

+0

実際、公式のソースにはこのような機能の開始点があります。これは、ルート以外のアプリケーションによる多数のベンダーデバイスで使用可能です。 –

+0

APIドキュメントに記載されていない限り、これらは公式ではありません。スクリーンショットを取る方法は現在サポートされていないか、またはSDKから直接取得されているため、SDKと対話する公式の方法はありません。 –

+0

'View.getDrawingCache(boolean autoScale)'についてはどうですか?このビューの図がキャッシュされているビットマップを返します。_ – iDroid

18

これは単にあなたが

を変更する必要があります注意点とウィンドウのフラグ

public class FlagSecureTestActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getWindow().setFlags(LayoutParams.FLAG_SECURE, 
         LayoutParams.FLAG_SECURE); 

    setContentView(R.layout.main); 
    } 
} 

FLAG_SECUREを追加するには、the following approachを使用し

7" 2サムスンタブに私のために働きました

LayoutParams 

~

WindowManager.LayoutParams 
+0

これはほとんどの開発者にとってうまくいくはずです。 –

+0

は、ランドスケープモードで7.0で動作していません。 –

関連する問題