スクリーンショット抑止概要

【APIの説明】

スクリーンショットとは

弊社の一部の機種に搭載されている、HOMEキー+電源キー同時押しによる画面キャプチャ機能のことを指します。

スクリーンショット抑止のIntentについて

コンテンツ保護のため、アプリケーションがスクリーンショットを禁止したい場合、本体のスクリーンショット機能に対し、アプリケーションからこのIntentを 発行することで、スクリーンショットを抑止する機能を搭載できます。

スクリーンショット抑止の制御について

スクリーンショット抑止機能の制御は、本体が行います。
具体的には、アプリケーションが本体側にブロードキャストインテントを発行することにより、本体がスクリーンショット可否を制御するようになります。
スクリーンショット抑止機能の搭載でアプリケーション側で実装が必要なのは、Intentの発行のみです。

Intent通知について

○スクリーンショット抑止のIntent
スクリーンショットを抑止するには以下のIntentを指定します。

パラメータ 定数名
Action jp.co.sharp.android.intent.action.DISABLE_SCREENSHOT
Extra jp.co.sharp.android.intent.extra.disable.PACKAGE_ACTIVITY_NAME

○Intentの発行から制御の設定/解除について 
1)アプリケーションの起動時に上記IntentをBroadcastする。このとき禁止したいパッケージ名を指定する。
-------- 以下は本体が制御します --------
2)スクリーンショット禁止モードになる。
3)指定されたパッケージのActivityが起動している間は常にスクリーンショットを禁止する。
4)当該パッケージのActivityが終了していれば再びスクリーンショットを撮れるようになる。

【APIの使い方】

Feature定義の利用

スクリーンショット抑止機能が搭載されている機種には下記のFeatureが定義されています。
jp.co.sharp.android.screenshot.disable

このFeature定義を参照することで、アプリの挙動を変えることができます。

if(getPackageManager().hasSystemFeature("jp.co.sharp.android.screenshot.disable")){
    //スクリーンショット抑止機能がある場合の処理
} else {
    //スクリーンショット抑止機能がない場合の処理
}

スクリーンショット抑止Intentに対応した機種にのみアプリを配信することも可能です。
Manifestファイルの<manifest>の子要素に<uses-feature>を追加します。
<uses-feature>の android:name属性にはjp.co.sharp.android.screenshot.disable を設定します。

<uses-feature>を設定することにより、弊社端末のスクリーンショット抑止Intent搭載機種以外でGoogle Playにアクセスした場合に表示されないようになります。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.package.name">
  ...
  <uses-feature
android:name="jp.co.sharp.android.screenshot.disable"
android:required="true" />

  ...
</manifest>

スクリーンショット抑止機能を設定する

package jp.co.sharp.android.sample;
 
Intent newIntent = new Intent();
newIntent.setAction("jp.co.sharp.android.intent.action.DISABLE_SCREENSHOT");
// Actionに画面スクリーンショット抑止のAction定数を設定
newIntent.putExtra("jp.co.sharp.android.intent.extra.disable.PACKAGE_ACTIVITY_NAME", "jp.co.sharp.android.sample");
// アプリのパッケージ名をExtraへputする
sendBroadcast(newIntent);

※注意※
jp.co.sharp.android.intent.extra.disable.PACKAGE_ACTIVITY_NAMEの値としてExtrasへputするのはアプリケーションのパッケージ名です。
Intent通知で引き渡されたパッケージ名配下のActivity(アプリケーション)に対し、スクリーンショット抑止機能が働きます。

【その他の特記事項】

Intent使用に関する注意

本機能に対応しない端末では、ブロードキャストインテントが無視されるため、動作に影響はありません。
抑止宣言したアプリがバックグラウンドに存在する場合もスクリーンショットを抑止します。
これは透明なActivityが前面にいるときへの対策です。
なお、将来の機種では透過なActivityへの対策を施し、スクリーンショットを抑止しているアプリがフォアグラウンドの場合のみスクリーンショットを抑止するようになることが考えられますので、抑止したいアプリは、起動中アプリの構成によらず抑止宣言して下さい。

サンプルアプリについて

AddOnのエミュレータにスクリーンショット機能自体が非搭載のため、抑止機能を利用したサンプルは正常に動作しません。動作確認には、抑止機能搭載の実機でご確認ください。

  • ※ 2011年7月6日 【APIの使い方】「スクリーンショット抑止機能を設定する」のサンプルコードをstartActivity() からsendBroadcast() へ修正致しました。
このページの先頭へ