Adobe AIR 2.0 이 발표되었습니다.

내년 초에 정식으로 나온다는데 기대가 이만 저만이 아닙니다.

AIR 2.0 의 새로운 기능에 대해서 전해드리겠습니다.


  - Multitouch and Gesture

AIR 2.0과 Flash Player 10.1에서 멀티터치에 대한 API가 제공됩니다.

GestureEvent와 TransformGestureEvent를 통해서 전달되며

GestureEvent의 종류는

 - GestureEvent.GESTURE_TWO_FINGER_TAP
 - GestureEvent.GESTURE_PRESS_AND_TAP

iPod touch를 써보신 분들은 아시겠지만 탭의 종류는 두 가지입니다. 두 손가락으로 두드리는 것과 한 손가락으로 두드리는 것입니다.

한 손가락으로 두드렸을때는 GESTURE_PRESS_AND_TAP 이벤트가 발생하고

두 손가락으로 두드렸을때는 GESTURE_TWO_FINGER_TAP 이벤트가 발생하는 것입니다.

그리고 TransformGestureEvent는 다음과 같습니다.

 - TransformGestureEvent.GESTURE_PAN
 - TransformGestureEvent.GESTURE_ROTATE
 - TransformGestureEvent.GESTURE_ZOOM

두 손가락으로 같은 방향은 pan, 간격을 유지하며 서로 다른 방향일 때는 rotate, 두 손가락이 서로 가까워지거나 멀어지면 zoom으로 구분됩니다.

iPod touch를 사용할 때 할 수 있는 동작들을 모두 지원합니다.

아래는 시연 영상입니다.

(Play하면 자동으로 멀티터치부분부터 재생됩니다.)






  - Opening Files

“Launch file apps” 라고 소개되었던 내용입니다.

정확한 표현은 “Opening File”입니다. 즉 파일을 실행시키는 것과 마찬가지입니다.

간단하게 예를 보여드리면

var file: File = new File( “/design.psd” );
file.openWithDefaultApplication();

즉 해당 파일의 확장자로 지정되어있는 프로그램으로 연결시켜주는 것입니다.

psd라면 포토샵으로 exe파일이라면 실행을 시켜주겠지요.

먼가 감이 오시나요?

그렇습니다.

이날 Mike Chambers가 만든 예제를 보여줬었습니다.

바로 script 파일을 만들어 Mac에서 실행시켜서

바탕화면의 스크린샷을 찍는 것을 보여줬습니다.

비록 Application으로 바로 가져올 수는 없지만 (방법이 없진 않죠 :P )

외부 API를 call할 수 있다는 것만으로도 할 수 있는 것이 많게 될거 같습니다.

AIR가 바탕화면을 찍을 수 없다는 것이 참으로 한이었기 때문이죠.

어쨌건 이제 탐색기나 FTP프로그램을 완벽하게 만들 수 있게 되었습니다.



  - File “downloaded”

Mac유저라면 파일들이 Download 된 것인지 알고 싶어할때가 있었던가 봅니다.

file.donwloaded 라는 속성(get/set)이 추가되었습니다.

만약 FileReference.download()를 통해서 다운받으면 자동으로 속성이 true로 설정됩니다.



  - Volume Detection

USB로 시연하던 내용이 바로 이 내용입니다.

새로운 Storage가 연결되거나 해제될때 event를 받을 수 있게 되었습니다.

StorageVolumeInfo.storageVolumeInfo.addEventListener( “...”, volumeListener );

function volumeListener( e: SomeEvent ): void
{
    var volume: StorageVolume = e.storageVolume;
    trace( volume.fileType ); // FAT, NTFS
    trace( volume.isRemovable ); // true, false
    trace( volume.isWritable ); // true, false
    trace( volume.drive ); // maybe a File
    trace( volume.name ); // String
    trace( volume.rootDirectory ); // maybe a File
}

아직 이벤트에 대한 정보는 없어서 간단하게 코드로 예를 들어 보았습니다.

또 이제는 모든 드라이브 정보를 받아올 수 있습니다.

var drives: Vector< StorageVolume > = StorageVolumeInfo.storageVolumeInfo.getStorageVolumes;

var volume: StorageVolume;
for each( volume in drives )
{
trace( volume.nativePath );
}

// c:\
// d:\
// e:\

이와 같이 사용할 수 있게 될것입니다.

아래는 디바이스별 detect할 수 있는 목록입니다.

 Device Receive Event
isRemovable
 Audio CD
 True  True
 Data CD
 True  True
 USB Flash Drive
 True  True
 Firewire Drive
 True  False
 USB Hard Drive
 True  False
 Share Volume (Time Capsule)
 True  True
 Network Drive
 True  False
 Digital Camera (Picture Transfer Protocol)
 False  False
 iPhone  False  False
 Flip Video
 True  True




  - Native Processes

AIR에서 이제 외부 실행파일을 실행시킬 수 있게 되었습니다.

파라미터를 넘겨서 전달할 수 도 있습니다.

다만 외부 실행파일에서 값을 전달 받을 수는 없습니다.

보안이 이유겠지요.

다음과 같은 코드를 보실까요.

var exeFile: File = new File ( "merong.exe" );

var process: NativeProcess = new NativeProcess();

var args: Vector.< String > = new Vector.< String >();
args[ 0 ] = "-a";
args[ 1 ] = "merong";

var startUp: NativeProcessStartUpInfo = NativeProcessStartUpInfo();
startUp.arguments = args;
startUp.executable =  exeFile;

process.start( startUp );

이해가 바로 가시죠?

NativeProcess라는 객체를 생성해서 StartUpInfo 에 실행시킬 파일과 전달할 파라미터를 넣어주고 start() 시켜주면 됩니다.

이렇게 실행하면 프로세스가 시작되는 Event와 끝나는 Event를 알 수 있습니다.

끝나는 때에 맞춰 폴더를 열어준다던가 정보를 보여준다던가 할 수 있을거 같습니다.

이 밖에 실행하는데 있어서 몇가지 조건이 있는데 아직 분석이 정확하지 않아 자세히 알아본후에 업데이트하겠습니다.



 - File Promises

파일에는 실제로 존재하지 않는 파일이 있을 수 있습니다.

예를 들면 FTP에서 파일을 드래그해서 가져온다던가 파일만 먼저 만들어놓고 내용은 나중에 기록하는 것들이 있겠죠.

이런 파일들을 컨트롤할 수 있게 되었습니다.

IFilePromise 인터페이스가 추가됐습니다.

open(): IDataInput
close();
reportError();
isAsync
relativePath

등의 메소드, 속성들이 있습니다.

그리고 URLFilePromise 와 ClipboardFormats.FILE_PROMISE_LIST_FORMAT 이 추가되었습니다.

Adobe는 이 기능을 사용할 경우 progress bar를 꼭 넣어주라고 권장하고 있습니다.




 - ServerSocket

드디어 ServerClient 뿐만이던 Flash에게 ServerSocket이 생겼습니다.

P2P Application을 만들 수 있게 됐고

FTP도 지원하게 됐습니다.

var socket: ServerSocket = new ServerSocket();
socket.bind( 23, "localhost" );
socket.listen();
socket.addEventListener( Event.CONNECT, connectClient );

function connectClient( ...args ): void
{
// do something to client.
}

와 같은 코드이지 않을까 싶습니다.

(메소드는 공개됐지만 api전체가 공개된게 아니라 정확하지 않습니다.)
저작자 표시 비영리 변경 금지
신고
  1. 겨울나기 2009.10.07 16:49 신고

    제일 기대하고있었던 부분입니다! 오오오~
    Adobe가 오늘 저를 설레게 만드는군요

    소식 전해주시느라 수고하시네요~ 감사합니다. :)

  2. Favicon of http://blog.naver.com/setimets 쫑쫑쫑 2009.10.07 17:43 신고

    에어가 제일 크리 하네요 ㅋ ~ 뜨든 ~ ㅠ,. 아 기대된다 ~

  3. Favicon of http://desty.kr desty 2009.10.07 17:52 신고

    동영상에서 웃음(실수했을때)과 탄식(안될때)이 절묘하게 들리네요

  4. Favicon of http://improgrammer.com 케이 2009.10.07 21:24 신고

    멀티터치 대박!! 아이폰에 탑제하려면 저건 기본으로 준비해놨을거라 예상했었지만 이렇게 나온거 보니... 한마디로 굿!! 그동안 멀티터치 구현하려고 쾌 삽질하던거 한순간에 다 털어버리네 그려... 멀티터치 지원되면 키오스크 시장에도 많은 영향력 생기겠다 그치? 그리고 서버소켓도 대박이네! 지금 호스팅업체나 웹하드 업체들이 제공하는 웹ftp툴보면 엑티브엑스로 다 떡칠해놔서 맥에선 절대 못쓰고 불편했는데... 이쪽 시장 완전 물갈이 한번되겠네... 미리미리 준비해야겠다... 좋은 정보 thx~

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.10.08 01:55 신고

      근데 시연만봤을땐 퍼포먼스가 별로였는데
      이따가 부스 내려가서 직접 해보고 얘기해 줄께
      영상으로도 찍어오마 ㅋ

  5. Favicon of http://kindmonkey.com 성지니어스 2009.10.07 23:45 신고

    허허. 이거 좀 설레이는데요..

  6. Favicon of http://asnike.com 니케 2009.10.08 00:25 신고

    오.. AIR가 더욱 막강해지는 순간!!
    이제 진짜 재밌는걸 더 많이 만들수 있겠네요 ㅎㅎ
    형 수고하셨어요!!

  7. Favicon of http://desty.kr desty 2009.10.08 16:28 신고

    돌아오시면 개정판 준비하셔야겠네요 ^_^

  8. 그린비 2009.10.09 12:24 신고

    안녕하세요. 혹시 에어에서 녹음관련된 이슈는 없었나요? 녹음 관련 어학 어플을 AIR로 만들어 보려다가 서버를 통하지 않고는 방법이 없다는걸 알고 접고 .NET으로 틀었는데요. AIR도 디렉터의 xtra처럼 외부 지원이 가능했으면 좋겠는데.. 떱떱..

+ Recent posts