AIR アプリケーションサンドボックスでは、アプリケーションはユーザーの許可なくカメラにアクセスすることができます。ただし、Android では、アプリケーション記述子に Android の CAMERA 権限を指定する必要があります。
Flash Player がカメラの出力を表示する前に、ユーザーが Flash Player にカメラへのアクセスを明示的に許可する必要があります。
attachCamera()
メソッドが呼び出されると、Flash Player によって設定ダイアログボックスが表示されます。このダイアログボックスで、ユーザーは Flash Player にカメラとマイクへのアクセスを許可するかどうかを指定します。ユーザーが「許可」ボタンをクリックした場合、Flash Player では、カメラの出力がステージの Video インスタンスに表示されます。「拒否」ボタンをクリックした場合は、Flash Player はカメラに接続できないので、Video オブジェクトは何も表示しません。
Flash Player がカメラへのアクセスを許可されているかどうかを確認するには、次のコードで示すように、カメラの
status
イベント(
StatusEvent.STATUS
)を監視します。
var cam:Camera = Camera.getCamera();
if (cam != null)
{
cam.addEventListener(StatusEvent.STATUS, statusHandler);
var vid:Video = new Video();
vid.attachCamera(cam);
addChild(vid);
}
function statusHandler(event:StatusEvent):void
{
// This event gets dispatched when the user clicks the "Allow" or "Deny"
// button in the Flash Player Settings dialog box.
trace(event.code); // "Camera.Muted" or "Camera.Unmuted"
}
「許可」または「拒否」のいずれかがクリックされると同時に、
statusHandler()
関数が呼び出されます。次のいずれかのメソッドを使用し、どのボタンがクリックされたかを検知することができます。
-
statusHandler()
関数の
event
パラメーターには、「Camera.Muted」または「Camera.Unmuted」というストリングを含むコードプロパティがあります。値が「Camera.Muted」であれば、「拒否」ボタンがクリックされているので、Flash Player はカメラにアクセスできません。次に例を示します。
function statusHandler(event:StatusEvent):void
{
switch (event.code)
{
case "Camera.Muted":
trace("User clicked Deny.");
break;
case "Camera.Unmuted":
trace("User clicked Accept.");
break;
}
}
-
Camera クラスには
muted
という名前の読み取り専用のプロパティがあり、ユーザーがカメラへのアクセスを拒否したか(
true
)または許可したか(
false
)が、「Macromedia Flash Player 設定」の「プライバシー」パネルに表示されます。次に例を示します。
function statusHandler(event:StatusEvent):void
{
if (cam.muted)
{
trace("User clicked Deny.");
}
else
{
trace("User clicked Accept.");
}
}
送出されるステータスイベントを確認すると、カメラへのアクセスの可否を処理するコードを記述し、適切にクリーンアップすることができます。例えば、「拒否」ボタンがクリックされた場合、ビデオチャットに参加するには「許可」ボタンをクリックする必要があるというメッセージを表示することができます。または、表示リストの Video オブジェクトが削除され、システムリソースが解放されていることを確認します。
AIR では、カメラを使用するための許可は動的ではないので、Camera オブジェクトはステータスイベントを送出しません。