套件 | flash.media |
類別 | public class CameraUI |
繼承 | CameraUI EventDispatcher Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 2.5 |
launch()
方法會要求裝置開啟預設的攝影機應用程式。當擷取的影像或視訊可供使用時,MediaEvent 物件會傳送 complete 事件。由於預設的攝影機應用程式可以使用各種格式來儲存影像或視訊,因此無法保證 AIR 執行階段可以載入與顯示傳回的媒體物件。
在某些平台上,可將相機傳回的媒體物件作為檔案類型媒體承諾來存取。在其他平台上,媒體承諾不是檔案類型,而且 MediaPromise 物件的 file
和 relativePath
屬性是 null
。請勿在要用於多個平台上的程式碼中使用這些屬性。
在 Android 上,若無可用的外部儲存卡 (例如,當使用者將記憶卡掛接為 USB 大量儲存裝置時),預設的攝影機應用程式將不會開啟。此外,啟動攝影機的 AIR 應用程式也會失去焦點。若裝置資源不足,媒體擷取完成之前,作業系統可終止 AIR 應用程式。
在某些平台上,媒體物件會自動儲存在裝置媒體櫃中。在預設相機應用程式不會自動儲存影像和視訊的平台上,您可以使用 CameraRoll addBitmapData()
函數儲存媒體物件。
AIR 描述檔支援:行動裝置支援此項功能,但桌上型電腦作業系統或 AIR for TV 裝置不支援。您可以使用 CameraUI.isSupported
屬性測試執行階段的支援狀況。如需有關跨多個描述檔之 API 支援的詳細資訊,請參閱 AIR 描述檔支援。
詳細資訊
屬性 | 定義自 | ||
---|---|---|---|
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
isSupported : Boolean [靜態] [唯讀]
報告目前裝置是否支援 CameraUI 類別。 | CameraUI | ||
permissionStatus : String [靜態] [唯讀]
判斷應用程式是否已獲得使用攝影機的權限。 | CameraUI |
方法 | 定義自 | ||
---|---|---|---|
CameraUI()
建立 CameraUI 物件。 | CameraUI | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式,以便讓偵聽程式收到事件的通知。 | EventDispatcher | ||
會將事件傳送到事件流程。 | EventDispatcher | ||
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 | EventDispatcher | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
啟動裝置上預設的攝影機應用程式。 | CameraUI | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
會從 EventDispatcher 物件移除偵聽程式。 | EventDispatcher | ||
要求權限以存取 Camera UI。 | CameraUI | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object | ||
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。 | EventDispatcher |
事件 | 摘要 | 定義自 | ||
---|---|---|---|---|
[廣播事件] 當 Flash Player 或 AIR 應用程式取得作業系統焦點並成為作用中時傳送。 | EventDispatcher | |||
當使用者關閉 Camera UI 而未儲存圖片或視訊時,會傳送 cancel 事件。 | CameraUI | |||
當使用者在 Camera UI 中擷取靜態圖片或視訊時,會傳送 complete 事件。 | CameraUI | |||
[廣播事件] 當 Flash Player 或 AIR 應用程式失去作業系統焦點並成為非作用中時傳送。 | EventDispatcher | |||
當無法開啟預設攝影機時,會傳送 error 事件。 | CameraUI | |||
當應用程式要求權限以存取 Camera UI 時傳送。 | CameraUI |
isSupported | 屬性 |
permissionStatus | 屬性 |
CameraUI | () | 建構函式 |
public function CameraUI()
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 2.5 |
建立 CameraUI 物件。
launch | () | 方法 |
public function launch(requestedMediaType:String):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 2.5 |
啟動裝置上預設的攝影機應用程式。
您可以使用此類別,擷取靜態影像或視訊。視訊擷取會使用裝置上的 "Quality Low" 攝影機描述檔。
呼叫 launch()
方法時,將叫用裝置上預設的攝影機應用程式。AIR 應用程式將失去焦點,並等待使用者擷取靜態影像或完成擷取視訊。使用者擷取所要的媒體後,AIR 應用程式將重新取得焦點,且此 CameraUI 物件將傳送 complete
事件。若使用者取消操作,此 CameraUI 物件將改為傳送 cancel
事件。
注意:當 AIR 應用程式在背景等待使用者擷取影像或視訊時,Android 作業系統可能會關閉 AIR 應用程式。若發生此狀況,使用者必須重新啟動應用程式。AIR 應用程式不會為先前的影像擷取傳送媒體事件。
您可以使用 complete
事件所傳送之 MediaEvent 物件的 data
屬性,存取擷取的媒體檔案。此屬性為 MediaPromise 類別的實體,您可以使用 Loader 類別的 loadFilePromise()
方法,將它載入您的應用程式。請注意,裝置攝影機可能將擷取的媒體儲存為各種格式。就這一方面而言,視訊特別容易出問題。擷取的媒體可能無法在 AIR 中顯示。
參數
requestedMediaType:String — 要擷取的媒體物件類型。此參數的有效值定義於 MediaType 類別中:
|
事件
complete: — 當擷取媒體物件時傳送。
| |
cancel: — 當使用者結束原生攝影機而未擷取媒體物件時傳送。
| |
error: — 若預設攝影機應用程式為使用中時傳送。
| |
error: — 若 AIR 應用程式呼叫此函數時正在背景中執行時傳送。
|
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
requestPermission | () | 方法 |
public function requestPermission():void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 24.0 |
要求權限以存取 Camera UI。
事件
PermissionStatus: — 由使用者授與/拒絕要求的權限時傳送。
|
cancel | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.CANCEL
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 2.5 |
當使用者關閉 Camera UI 而未儲存圖片或視訊時,會傳送 cancel
事件。
Event.CANCEL
常數會定義 cancel
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 在其上取消作業之物件的參照。 |
complete | 事件 |
flash.events.MediaEvent
屬性 MediaEvent.type =
flash.events.MediaEvent.COMPLETE
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 2.5 |
當使用者在 Camera UI 中擷取靜態圖片或視訊時,會傳送 complete
事件。
complete
MediaEvent 的常數。
定義 MediaEvent
事件物件的 type
屬性值。這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
data | 可用媒體實體的 MediaPromise 物件。 |
error | 事件 |
flash.events.ErrorEvent
屬性 ErrorEvent.type =
flash.events.ErrorEvent.ERROR
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 2.5 |
當無法開啟預設攝影機時,會傳送 error
事件。
error
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 遇到網路作業失敗的物件。 |
text | 要顯示為錯誤訊息的文字。 |
permissionStatus | 事件 |
flash.events.PermissionEvent
屬性 PermissionEvent.type =
flash.events.PermissionEvent.PERMISSION_STATUS
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 24.0 |
當應用程式要求權限以存取 Camera UI 時傳送。檢查 status
屬性的值以確認是否已授與或拒絕權限
相關 API 元素
package { import flash.desktop.NativeApplication; import flash.display.Loader; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MediaEvent; import flash.media.CameraUI; import flash.media.MediaPromise; import flash.media.MediaType; public class CameraUIStillImage extends MovieClip{ private var deviceCameraApp:CameraUI = new CameraUI(); private var imageLoader:Loader; public function CameraUIStillImage() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraUI.isSupported ) { trace( "Initializing camera..." ); deviceCameraApp.addEventListener( MediaEvent.COMPLETE, imageCaptured ); deviceCameraApp.addEventListener( Event.CANCEL, captureCanceled ); deviceCameraApp.addEventListener( ErrorEvent.ERROR, cameraError ); deviceCameraApp.launch( MediaType.IMAGE ); } else { trace( "Camera interface is not supported."); } } private function imageCaptured( event:MediaEvent ):void { trace( "Media captured..." ); var imagePromise:MediaPromise = event.data; if( imagePromise.isAsync ) { trace( "Asynchronous media promise." ); imageLoader = new Loader(); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, asyncImageLoaded ); imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError ); imageLoader.loadFilePromise( imagePromise ); } else { trace( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); showMedia( imageLoader ); } } private function captureCanceled( event:Event ):void { trace( "Media capture canceled." ); NativeApplication.nativeApplication.exit(); } private function asyncImageLoaded( event:Event ):void { trace( "Media loaded in memory." ); showMedia( imageLoader ); } private function showMedia( loader:Loader ):void { this.addChild( loader ); } private function cameraError( error:ErrorEvent ):void { trace( "Error:" + error.text ); NativeApplication.nativeApplication.exit(); } } }
Tue Jun 12 2018, 03:47 PM Z