FireMonkey 배포시 간단한 팁(선택적 배포-설정파일 유지)

2014.05.23 11:35

오늘은 간단한 팁을 공유합니다.


파이어몽키를 이용해 앱 개발 후 컴파일(배포) 시 모든 파일들이 덮써져 버립니다.


환경파일(INI) 또는 임베디드 디비파일등의 테스트 데이터는 유지되야 할 경우가 많은데요. 꽤 불편합니다.


하지만, 배포 관리자의 툴바에 선택적으로 파일을 배포하는 기능버튼이 있어 안내합니다.

아래 그림과 같이 버튼 제일 우측에 Change Overwrite value for selected Items라는 힌트를 가진 버튼이 있구요.

직역해 보면 "선택된 항목의 덮어쓰기 값을 변경" 정도가 됩니다.


목록에서 파일을 선택하고 해당 버튼을 누르면 필드 제일 오른쪽의 OverWrite 항목이 Always <> Never로 변경됩니다.



한가지 팁을 더 드리면

모바일 기기가 연결된 경우 툴바의 Connect() 버튼을 누르면 Remote Status에 원격지(기기)와 로컬의 파일 변경 상태를 확인 할 수 있습니다.


자세한 내용은 엠바카데로 문서 중 배포 관리자 항목을 참고하세요.

  • http://docwiki.embarcadero.com/RADStudio/XE6/en/Deployment_Manager
이상 간단한 배포 팁이었습니다.


저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 Deployment, Firemonkey, 배포관리자

파이어몽키 안드로이드 SDK Full Wrapper 파일

2014.05.21 11:32

RAD Studio XE7 에서는 Java2OP라는 이름으로 자바라이브러리를 델파이 브릿지 파일로 컨버젼하는 툴을 기본 제공합니다.

 - http://blog.hjf.pe.kr/268


아래 글은 XE6 이전 버전 사용자들이 참고할 수 있습니다.


파이어몽키 자료가 상당히 풍부한 FMXExpress(http://www.fmxexpress.com)에서 안드로이드 SDK 전체를 Object Pascal(Delphi)로 변환한 소스코드를 공개했습니다.

파이어몽키로 개발할 경우 제공되는 컴포넌트와 라이브러리 외에도 네이티브 SDK를 직접 제어할 수 있는데요. 그러기 위해서는 안드로이드 SDK를 오브젝트 파스칼에서 사용할 수 있도록 변환(Wrapping)하는 작업이 선행되어야 합니다.

FMXExpress에서는 Java2Pas(http://www.softwareunion.lu/en/downloads/)툴로 안드로이드 소스코드를 Object Pascal로 컨버팅 진행했습니다.



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 SDK, 안드로이드, 파이어몽키

  1. Blog Icon
    에우로카엘

    참고들 하세요.

    uses 구문 때문에 circle error많이나서 하나하나 다 손봐줘야하고,

    xe6에선 androidapi.helpers에 jstring 변환함수 들어가있는데 xe5에 맞춰져있는 것 같네요.

안드로이드 ARM 에뮬레이터 속도를 올리는 8가지 팁

2014.04.25 13:11

안드로이드 개발 시 많은 안드로이드 장비(device)에서 테스트 하지만 그렇지 못한 경우가 많습니다. 


이 경우 안드로이드 에뮬레이터를 이용할 수 있는데요. 안드로이드 에뮬레이터가 너무 느려서 고생을 합니다. 

이 문제를 다소 완화할 수 있는 내용이 있어 소개합니다. 


delphi.org를 운영하는 Jim McKeeth는 다음과 같이 안드로이드 에뮬레이터 속도를 올리는 8가지 팁을 소개했습니다.


  1. 실제 하드웨어를 사용 
  2. 가상머신에서 에뮬레이터를 실행하지 말 것 
  3. 가상머신에서 돌려야 한다면, Parallels desktop 9을 사용 
  4. 호스트 GPU를 사용 
  5. OpenGLES 라이브러리를 복사 
  6. Mac에서 에뮬레이터를 실행 
  7. 안드로이드 이전 버전으로 실행 
  8. AVD 하드웨어 구성을 조정 할 것

http://delphi.org/2013/11/8-tips-to-speed-up-your-android-arm-emulator-avd/


해당 글을 보시면 Jim McKeeth는 위의 8가지 중 2, 4, 5 항목과 때때로 7번 항목을 사용한다고 합니다.

여러분들도 상황에 맞춰 선택적으로 안드로이드 에뮬레이터에 적용하시면 더 낳은 성능으로 에뮬레이터를 사용하 실 수 있을 것 같습니다.


자세한 설명과 사용법은 해당 링크를 통해서 확인 바랍니다.


그리고 기본으로 제공되는 안드로이드 애뮬레이터 외의 다른 애뮬레이터를 사용할 수 있습니다. 

해당 내용은 다른 블로그 포스팅을 참고하시기 바랍니다.



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 android, AVD, Emulator

  1. Blog Icon
    초보자

    궁금한점이 있어 이곳에 문의 드립니다.. ^^
    아 처음 하다 보니 뭐 이리 복잡한지.. 쩝...

    첫번째 질문..
    업무용 앱을 만들고 있는데 서버 IP와 Port 등을 앱에서 저장하고 있어야 하는데...
    PDA나 뭐 이런곳에서는 텍스트 파일로 가지고 있으며 저장된걸 불러 주기도 하고 다시 바꿔 저장한 후에
    프로그램이 실행되면 텍스트에서 읽어 전역변수에 넣어서 사용했는데..
    앱에서는 어케해야 할지 잘 모르겠더군요... 좀 알려주세요.. ㅠ.ㅠ

    두번째 질문.
    종료하여면 스맛폰에서 빽을 누르면 바로 종료가 되버리는데 한번더 물어 보고 싶은데...
    showmessage 만 써봐서리.. 네/아니오 버튼이 나오게 하질 못하겠네요..
    다른 방법이 있는지.. ^^

    마지막으로
    스맛폰마다 고유ID 가 있는지요?
    컴퓨터는 Mac어드레스를 이용했는데... 앱도 있을법한데... 음
    혹 있다면 고유ID를 구하는 방법좀 알려주세요..

    언제나 와서 각종 정보 얻어 갑니다.. 정말 감사해요..
    ^^

  2. 1, 설정정보
    - 모바일도 INIFile을 이용하면 됩니다.
    2, 백버튼 제어
    if Key = vkHardwareBack then
    begin
    // 구현코드 입력
    Key := 0;
    end;
    3, 고유ID는 잘모르겠네요^^

  3. Blog Icon
    만주

    안녕하세요.
    위 링트에서 지니모션을 제가 이크립스에서는 태스트 해봤는데 잘 됩니다.
    그런데 xe6에서 태스트 해보니 "this application does not support ...." 애러 메지지가 지니모션
    창에서 뜨고 실행이 되지 않습니다.
    해결 할 수 있는 방법 있으면 좀 알려주세요.
    인터넷 좀 뒤져도 답이 나오지 않습니다.
    xe fmx는 정보가 너무 부족해서 첨 접하는 개발자는 너무 망막하군요.

  4. 제가 실수를 했네요^^
    지니모션의 경우 x86 기반의 안드로이드 애뮬레이터입니다.

    현제 델파이(파이어몽키)의 경우 ARM 기반으로 앱 제작이 가능하기 때문에 지니모션의 경우 현재 사용할 수 없습니다.

    글에 부가설명을 추가해 놓겠습니다.

    참고로 Intel(x86) 기반의 경우 엠바카데로에서 준비중에 있습니다.
    질문 주셔서 감사합니다.

스노우크래프트(Snow Craft) for 안드로이드(소스포함)

2014.04.25 10:48



델마당(http://www.delmadang.com)을 통해 양병규님이 Snow Craft 라는 게임을 Delphi XE5로 만드시고(Clone) 공개하셔서 소개합니다. 아마 예전에 윈도우 버전으로 작업했던 부분을 안드로이드로 포팅하신 듯 합니다.


제가 가지고 있는 넥서스7 1세대에서도 아주 잘 돌아가고 무엇보다 게임이 재밌네요^^

소스를 열어보시면 배울 만한 것들이 많이 있습니다.

(아주 좋은 소스코드를 공개해 주신 양병규님에게 다시한번 감사드립니다.)


소스코드

아이콘 경로가 절대경로로 잡혀 있어 델마당 자료실의 첨부파일에서 절대경로만 수정하여 올립니다.

▶ 클래스 상속

클래스 상속을 통해 TBoy와 TSnow, TBunker의 공통된 기능을 TCharacter에서 구현되었습니다.

왜 클래스를 사용해야 하는지와 사용하는 방법에 대해 이해하실 수 있을 것 같네요.

▶ 캔버스의 사용

Canvas에 캐릭터 들을 직접 그리는 방식으로 작성하셨습니다.

캔버스 사용법 과 마우스 이벤트를 어떻게 각 케릭터와 연결했는지를 보시면 아이디어를 얻으 실 수 있습니다.

▶ 리소스를 통한 효과음 사용

Sound.pas 파일을 보시면 효과음 파일을 배포관리자를 통해 배포하지 않고 사용할 수 있는 좋은 팁이 있습니다.

Sound.pas 파일의 PlaySound 메소드에는 ResourceID를 통해 등록된 Resource에서 스트림을 가져와 재생하는 코드는 아주 유용한 팁인 것 같습니다.


procedure PlaySound(const ResourceID: String);
var
  ResStream: TResourceStream;
  TempFile, FileName: String;
begin
  if MediaPlayer.State = TMediaState.Playing then Exit;

  FileName := ResourceID + '_tmp.mp3';
  TempFile := TPath.Combine( TPath.GetTempPath, FileName );

  if not FileExists( TempFile ) then
   begin
     ResStream := TResourceStream.Create(HInstance, ResourceID, RT_RCDATA);
     try
       ResStream.SaveToFile( TempFile );
     finally
       ResStream.Free;
     end;
   end;
  MediaPlayer.FileName := TempFile;
  MediaPlayer.Play;
end;


Project > Resources and images.. 메뉴를 통해 위의 화면을 이용 할 수 있습니다.


참고 링크




저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 android, Firemonkey, Snow craft, 양병규

  1. Blog Icon

    비밀댓글입니다

  2. 네 의견 감사합니다^^ 정지화면을 하나 더 올렸습니다.
    모바일에서 gif애니메이션이 안돌아가는 것을 몰랐네요.

델파이 물리엔진 Box2d 소개. FMX, VCL 용(오픈소스)

2014.04.22 11:11


Qianyuan Wang은 몇 년전 델파이 VCL용 2D 물리엔진을 오픈소스로 진행하였습니다.


위의 코드를 멀티플랫폼 용 Firemonkey용 소스코드로 변환되었다는 반가운 소식을 전합니다.(oDesk 엔진니어 참여)

제가 간단하게 테스트 해보니 테스트가 벅찰 정도로 다양한 샘플이 준비되어 있구요. 

별도의 라이브러리 추가 없이 소스코드만으로 구현이 가능합니다. 


여러분의 모바일 앱과 어플리케이션에 물리엔진을 장착해 보세요.


아래는 Box2d에서 제공하는 데모 목록입니다.
  • Add Pair(stress test)
  • Apply Force
  • Body Types
  • Breakable
  • Bridge
  • Bullet Test
  • Buoyancy Controller
  • Cantilever
  • Car
  • Chain
  • Character Collision
  • Collision Filtering
  • Collision Processing
  • Compound Shapes
  • Confined
  • Continuous Test
  • Convex Hull
  • Conveyor Belt
  • Distance Test
  • Dominos
  • Dynamic Tree Test
  • Edge Shapes
  • Edge Test
  • Explosion
  • Free Rope
  • Gears
  • Graviation Controller
  • Mobile
  • Mobile Balanced
  • Motors & Limits
  • One Sided Platform
  • Pin Ball
  • Poly Shapes
  • PolyCollision
  • Prismatic
  • Pulleys
  • Pyramid
  • RayCast
  • Restitution Test
  • Revolute
  • Rope In Wind
  • Rope Joint
  • Sensor Test
  • Shape Editing
  • Slider Crank
  • Sphere Stack
  • Terrain Box
  • Theo Jansen’s Walker
  • Tiles(stress test)
  • Time of Impact
  • Time of Impact2
  • Tumbler(stress test)
  • Varying Friction
  • Varying Restitution
  • Vertical Stack
  • Web
  • Wheel Joint
  • Ping Pong (Arkanoid / Breakout)



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 appmethod, box2d, Delphi, Firemonkey, vcl, 소스포함, 오픈소스

Instagram Filter 효과와 같은 앱(소스 포함)

2014.04.09 11:21


인스타그램 앱과 같이 사진에 다양한 필터를 적용하는 앱에 대한 소스코드가 공개되 었습니다.

아시다 시피 파이어몽키에는 60여종의 다양한 이펙트(TEffect)가 제공(62개의 파이어몽키 이미지 효과(Effects))됩니다. 이펙트를 이용해 아주 쉽게 위와 같은 동작을 하는 앱을 만들 수 있습니다.


간단한 구현 원리를 추가하면, 

  • 첫번째 탭에서 원본이미지에 TSelection 컴포넌트를 올리고 영역을 지정합니다.
  • 두번째 탭에서 상단의 이미지에 앞에서 선택한 영역의 이미지를 표시하고, 아래에는 다양한 효과(TEffect)가 적용된 이미지를 놓고, 이미지 선택 시 TFilterEffect.ProcessEffect 메소드를 적용합니다.
  • 세번째 탭에서는 이펙트가 적용된 이미지를 ActionList의 ShowShareSheetAction을 통해 공유 및 저장합니다.


더 자세한 내용은 아래의 소스코드를 통해 확인하세요.



참고링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 FMX, TEffect

모바일 Gesture로 메뉴를 표시/감추기(소스공개)

2014.03.27 10:54

제스쳐(손가락 끌기)로 좌측 메뉴를 표시하고 감추는 샘플 동영상 및 코드입니다.






관련링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 Drawer, Gesture, Menu, UI, 모바일, 소스공개

  1. Blog Icon
    관심

    궁금한게 한가지 있습니다.
    XE5로 안드로이드 앱 작업중인데.. main.pas 와 sub.pas 이렇게 두개의 창이 있는데..
    서로 데이터를 주고 받고 싶은데.. 그게 잘 않되더라구요..
    main.pas에서 fromSub.show 해서 창이 띄우고 그곳에서 작업을 해서 해당 결과를 main 창으로 가져오려고
    전역 변수도 써보고 했는데.. 그 데이터가 않들어 오더라구요..
    혹시 방법이 잘못된 것인지요.. 일반 C/S 프로그램만 개발해 봐서리.. 잘 모르겠네요..
    알려주세요.. ^^

  2. 아이디어를 2가지 드릴게요.
    1, SubForm에 이벤트를 통해 내용을 전달할 수 있습니다.
    property OnData: TNotifyEvent read FOnData write FOnData;
    서브폼에서 결과가 나오면 아래의 이벤트를 발생시키고 메인폼에서 서브폼의 public한 데이터를 참고하면 좋을 것 같네요.(너무 어렵나요?)

    2, 모바일에서는 TFrame을 사용하시면 편리합니다.

  3. TSubForm = class(TForm)
    ...
    private
    FData: TMemoryStream;
    procedure DoData;
    public
    property OnData: TNotifyEvent read FOnData write FOnData;
    property Data: TMemoryStream read FData; // 원하시는 데이터 등등...
    end;

    implimentation

    procedure TSubForm.DoData;
    begin
    if Assigned(FonData) then
    FOnData(Self);
    end;

    /////

    TMainForm = ...
    private
    procedure SubFormDataEvent(Sender: TObject);
    end;

    ///
    SubForm := TSubForm.Create(Self);
    SubForm.OnData := SubFormDataEvent;

    //
    procedure TmainForm.SubFormDataEvent(Sender: TObject);
    begin
    if SubForm.Data.Size > 0 then
    begin
    ........
    end;
    end;

    위의 답변이 너무어려워 몇자 구현코드를 추가했는데 이해되실지 모르겠네요 ...-_-; 쉽운 설명은 너무 어려워요...
    대충 흐름만 보시면 될 것 같습니다.

  4. Blog Icon
    관심

    정말 감사합니다..
    함 도전해보구.. 다른 질문 사항 있으면 다시 여쭤 볼께요..
    정말 염치가 없지만 감사합니다..

  5. TFrame을 이용한 내용 곧 포스팅 예정이니 해당 내용도 참고하시면 도움이 될것 같습니다.
    이달안에 포스팅하겠습니다.^^

Sliding Popup menu 디자인(소스 공개)

2014.03.27 10:51



상단의 버튼을 누르면 슬라이드 형태로 팝업메뉴가 나오는 방식입니다. 아래의 동영상으로 자세한 내용 확인할 수 있습니다.





관련링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 Firemonkey, Slide menu, 소스공개

Bitmap의 Pixel에 접근(TBitmap.Map, TBitmapData)

2014.03.27 10:31

이 내용은 FireMonkey 관련 내용입니다.


Bitmap에 Pixel 단위로 접근하는 방식을 소개합니다.

Bitmap의 Map 메소드를 이용해 TBitmapData 객체를 얻어와 제어하는 방식입니다.


아래의 링크를 참고하시면 더 자세한 정보 얻으실 수 있습니다.


참고링크


저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 TBitmapData Bitmap.Map

구글맵과 3D 연동(느슨한)

2014.03.26 10:01



구글맵과 3D를 연동해 아주 색다르게 맵을 표현하는 데모 앱입니다.

실제 구동하면 지도가 회전되고 그 중심에 TCone으로 현재의 위치를 표시합니다.


샘플을 통해 아래의 내용을 확인하실 수 있습니다.

  • 위치센서로 위도와 경도를 읽는다.
  • 구글맵에서 주변 지도를 얻는다.
  • 지도에 InvertEffect효과를 주어 위의 화면과 같이 표현한다.
  • 위의 작업은 AnonymousThread로 처리한다.
  • 기타 3D layer 구성과 FloatAnimation을 이용한 회전


참고링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키

메신저 형태의 대화상자 표시

2014.03.26 09:34


메신저 형태의 대화를 표시하는 방법을 소개합니다.


TVertScrollBox 위에 TCalloutRectangle을 올리고, TText와 TImage로 표현했는데요.

더 다양한 컨트롤들로 확장할 수 있을 것 같습니다.


참고하셔서 더 멋진 UI를 구성하시기 바랍니다.


http://www.fmxexpress.com/build-a-messenger-layout-like-whatsapp-using-delphi-xe5-firemonkey-on-android-and-ios/

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키

MP4 Tag Library(Win32/64, OSX, iOS, Android 사용가능)

2014.03.13 09:23


http://www.3delite.hu/Object%20Pascal%20Developer%20Resources/download.html#mp4taglibrary

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 Delphi, Firemonkey, 파이어몽키

무선으로 안드로이드 앱 디버깅 하기(RAD Studio XE5)

2014.03.10 09:52


안드로이드 앱 개발 시 매번 USB 케이블을 꽂고 디버깅하는 것이 아니라 WIFI환경의 무선인터넷으로 안드로이드 앱을 테스트, 디버깅하는 방법을 소개합니다.

두개의 블로그 포스팅에서 내용을 확인할 수 있습니다.


http://delphi.org/2013/10/wireless-android-debugging-with-delphi-xe5/


http://blog.devart.com/remote-debug-of-android-application-in-rad-studio-xe5-via-wifi.html

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 android, Firemonkey, Wifi ADB, XE5

Flappy Firemonkey 게임앱 소개(소스 공개)

2014.03.06 11:15


Flappy bird와 비슷한 게임인 Flappy firemonkey라는 게임이 파이어몽키로 만들어 졌습니다.

아주 간단하면서도 중독성 있는 게임이죠^^ 


현재는 TBitmap에 Assigned하는 방식으로 캐릭터를 구현했구요. 향후 TSprite 컴포넌트나 TBitmapListAnimation에 변경할 계획을 갖고 있다고 합니다.

화면을 탭하면 뛰어오르고 서서히 기울어지며 떨어지는 캐릭터를 어떻게 구현했는지 공개된 소스를 통해 확인하면 좋을 것 같습니다.

관련 링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 Firemonkey, Flappy Fiiremonkey, 소스공개, 파이어몽킹

안드로이드 셋팅값 셋팅하기

2014.03.04 18:01


안드로이드의 설정값을 델파이 코드로 설정하는 방법을 안내해 줍니다.

샘플로 절전모드(자동 화면꺼짐)을 제어하는 부분을 설명합니다.


http://delphi.org/2014/03/setting-android-settings/

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 Firemonkey, 안드로이드 설정, 파이어몽키

  1. Blog Icon

    비밀댓글입니다

앱의 화면모드(가로, 세로) 지정하기

2014.02.27 16:03

앱의 가로모드, 세로모드를 고정하는 방법은 프로젝트 옵션에서 설정 가능합니다.


가로만, 세로만 지원하기 위해서는 아래와 같이 Custom orientation 항목을 설정해 주세요.

  • Project > Options > Application > Orientation


 모드

 반영내용 

 Portrait

세로모드 고정 

 Upside down

세로모드 고정(거꾸로: 홈버튼이 위에)

 Landscape home right

가로모드 고정(홈버튼이 오른쪽에)

 Landscape home left

가로모드 고정(홈버튼이 왼쪽ㅇ)



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키

Sheet Animation 컴포넌트(움직이는 캐릭터 컴포넌트) 소개

2014.02.27 13:04

안녕하세요. 험프리.김현수입니다. 


오늘은 필요할듯 말듯한 캐릭터 애니메이션 컴포넌트 하나  소개합니다. 


TSprite라는 컴포넌트인데요. 오른쪽처럼 사용됩니다.

동작원리는 한장의 이미지에서 영역을 이동하며 화면에 출력하는 방식입니다.


일반적으로 캐릭터 애니메이션이 게임같은 곳에서 많이 사용되는데요. 제가 생각하기론 앱의 기능을 소개하는 부분이나 움직이는 이모티콘 등에 활용한다면 앱의 완성도를 높이고, 풍부한 기능구현이 가능 할 것 같습니다.


오른쪽의 데모는 소스코드에 포함된 데모이구요. 뒤집기, 회전, 반전, 반복등의 기능을 자체 제공하고 있습니다.


아래와 같은 이미지가 순차적으로 표시됩니다.



컴포넌트를 다운로드 받으면 소스가 포함되어 있어 어떤식으로 구현되어 있는지 확인하실 수 있어 도움이 되실 것 같습니다.


설치안내

컴포넌트 설치 후 사용 시 몇가지 이슈가 있어 설치 및 대처방안을 남깁니다.


설치방법

  1. 아래에서 컴포넌트 다운로드 후 좋은(컴포넌트를 모아두는) 디렉토리로 이동합니다.(델파이에 경로 지정이 필요)
  2. source 디렉토리에서 FireBlaze.dpk를 열고 설치합니다.(프로젝트 메니저에서 Install 하면 됩니다.)
  3. 델파이에서 Tool > Options > Environment Options > Delphi Options > Library > Library path에 위의 source 경로를 추가합니다.
설치시 오류대응


만약 위와 같은 오류가 실행 시 발생하는 경우 아래의 단계를 진행하세요.

  1. FBSprite.pas 파일 오픈
  2. TSprite의 published 영역에 아래의 코드 추가
   property Position;
   property Width;
   property Height;


다운로드


참고링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 Animation, Firemonkey, FMX, 컴포넌트, 파이어몽키

안드로이드와 iOS 연락처 목록을 얻어오는 방법

2014.02.27 10:19

모바일 기기의 연락처 정보가 필요한 경우 유용한 팁이 될 것 같습니다.

각 플랫폼의 네이티브 API를 이용해 연락처의 이름, 전화번호, 이메일등의 정보를 얻어올 수 있습니다.

연락처 목록 조회

▶ 안드로이드

▶ iOS



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 android, contacts, Firemonkey, ios, 연락처조회

  1. Blog Icon
    김근배

    안녕하세요.
    너무 죄송하지만 혼자 하려다 보니 막막하기만 하네요
    스마트폰의 contact2.db 화일을 얻었습니다. 스마트폰의 연락처 이지요.
    이 db화일을 다시 다른 스마트폰으로 contacts 방으로 옴기려는데 permission denied 문제네요.쓰기 변경을 하고 옴기는 게 맞죠. 그런데 변경 하려면 방법을 모르네요
    그리고 옴기는 명령을 (pull,push, cp)여러가지 찾아 보앗지만 혼자 해결하기가 어려워서요 도움을 청해봅니다.
    도와 주실수 있으시죠.
    부탁 드리겠습니다.
    e-mail : gracekgb@naver.com
    수고하세요

  2. 다음 글을 참고해보세요. 저도 구체적인 연락처DB를 다루는 방법은 잘모르겠습니다.^^
    http://cranix.net/351

Tap-Tap 안드로이드 게임(소스공개)

2014.02.25 12:02

Delphi XE5로 개발된 Tap-Tap이라는 게임을 소개합니다. 손을 흔드는 귀여운 안드로이드 캐릭터(드로이드?)가 인상적인데요^^

이 게임은 러시아에서 개최된 2013년도 델파이 안드로이드 경연대회 우승하신 분의 작품입니다.


아래 보시는 것 처럼 대회용 작품이어서 약간은 급조한 태가 나지만, 초기 인트로 영상효과 및 드로이드의 애니메이션 효과가 너무나 멋지네요.


저도 간단하게 소스코드를 확인해 봤는데요. 드로이드의 애니메이션 효과는 대부분 TRectangle에 FloatAnimation 효과를 줘서 처리한것이 참 인상적이네요.

소스코드가 공개되어 있어 다운로드하셔서 테스트 가능합니다.(관련링크 참조)


여러모로 소스를 분석해 보시면 많은 아이디어와 도움이 될 것 같습니다.


구글플레이에서도 설치하셔서 테스트 해볼 수 있습니다.


관련링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 파이어몽키 android, Firemonkey, taptap, 소스공개

RESTful 웹서비스 연동(Rest Client 소개)

2014.02.24 23:21

현재 대상 서비스(discogs.com)에 인증 인터페이스가 추가되어 예제를 따라하면 인증오류가 발생합니다. 하지만 이 글을 통해 REST Client의 개념을 잡는데 도움이 될 것입니다.



안녕하세요. 험프리.김현수입니다.


모바일 개발 세미나 및 자료들에서 원격 데이터 연결 시 DataSnap을 강조하다 보니 원격지 데이터 연결 시 DataSnap만 써야 되는 것으로 오해가 종종있어, 기존 구성된 사이트에 RESTful(Http 요청)방식으로 연결하는 방법을 소개합니다.


여지껏 원격지 데이터를 받아오기 위해 일반적으로는 IdHttp 컴포넌트를 이용해 Get(또는 Post)하여 Response 데이터를 받아온 후 Parser를 이용해 데이터를 파싱하고, 파싱된 데이터를 사용하는 방법등 코딩 위의 방법이 대부분이었습니다.


이번에 소개해 드릴 컴포넌트는 XE5에서 새로 추가된 REST 컴포넌트입니다.


REST 컴포넌트는 RestClient, RestRequest, RestResponse 3가지 주요 컴포넌트를 주축으로 구성되어 있으며, 요청과 응답을 객체화 시키고, 응답의 경우 RESTResponseDataSetAdapter를 연결하여 사용자의 데이터 파싱없이 리스트 및 그리드에서 사용할 수 있는 DataSource로 데이터를 자동변환합니다. 


Source(대상) REST API 분석 및 준비

▶ 대상 사이트 API 분석

음반정보 제공 사이트인 discogs에 오픈된 API를 이용하겠습니다. 그중 Search API를 사용합니다.


대상정보

  • Request : http://api.discogs.com/database/search?q=psy&type=master&per_page=20
  • Response : JSON 포맷으로 응답, "results" 항목 이후의 배열데이터 사용(Search API 참고


REST Debugger을 실행하고 아래와 같은 정보를 입력합니다.(REST Debugger 설치 및 사용방법)

  • URL : http://api.discogs.com
  • Resource : database/search?q={query}&type=master&per_page={page}
    • query : psy
    • page : 20

[Send Request] 버튼을 누르고 응답이 성공한 경우 하단의 [Body] 탭에서 Root Element에 "results"를 입력 후 [Apply] 버튼을 누른 후 [Tabular Data] 탭으로 이동 후 목록이 표시되었는지 확인합니다.


(※ REST Debugger도 REST 컴포넌트 기반으로 개발되어 있습니다.)

REST 컴포넌트 추가

▶ 모바일 프로젝트 생성 및 데이터모듈 추가

새로운 프로젝트 생성 후 Data Module을 추가합니다.(Project Manager > Project 선택 > Add New > Other > Data Module)

아래와 같이 컴포넌트를 추가하고 속성값을 변경합니다.


RESTClient

  • BaseURL : http://api.discogs.com

RESTRequest

  • Client : RESTClient1
  • Resource : database/search?q={query}&type=master&per_page={page}
  • Params : query=psy, page=20

RESTResponse

RESTResponseDataSetAdapter

  • DataSet : ClientDataSet1
  • Response : RESTResponse1
  • RootElement : results

ClientDataSet

위와 같이 구성 후 RESTRequest1을 더블클릭(또는 우측마우스 > Execute) 하면 성공 시 "Response: 200 - HTTP/1.1 200 OK" 메시지가 실패 시 오류메시지가 표시됩니다.

연결이 성공한 경우 RESTResponse1의 Content항목을 선택하시면 응답받은 데이터를 확인할 수 있습니다.(만약, 목록이외의 항목이 필요한 경우 RESTResponse 컴포넌트의  Content 항목을 활용할 수도 있습니다.)

UI 구성(ListView 및 검색항목 추가)

위의 Data Module을 폼의 Uses 절에 추가합니다.(File > Use unit 후 선택)

(유닛명 및 컨트롤 명은 임의로 명명하였으니 본인의 이름으로 사용하세요.)

▶ 리스트 추가(ListView), 데이터연결

빈 폼에 ListView 하나 추가 후 align 속성을 "alClient"로 변경해 목록이 가득차도록 합니다. 

아래와 같이 DataModule의 ClientDataSet과 ListView의 LiveBinding을 연결해 리스트에 데이터를 표시합니다.


Live Binding 윈도우 표시하기 - Object Inspector 아래 Bind Visually를 누르면 메인폼 아래에 표시됩니다.


사실 위와 같이만 구성해도 얼마나 쉽게 원격지의 데이터를 사용할 수 있는지 느낌이 오실거에요.

▶ 검색 항목 추가

그럼 추가로 검색 UI를 추가하고 검색 인터페이스를 연동해보겠습니다.

검색 메소드 추가

DataModule 유닛의 public 절에 아래와 같이 검색용 Search메소드를 추가합니다.

type
  TDataModule9 = class(TDataModule)
    RESTClient1: TRESTClient;
    RESTRequest1: TRESTRequest;
    RESTResponse1: TRESTResponse;
    RESTResponseDataSetAdapter1: TRESTResponseDataSetAdapter;
    ClientDataSet1: TClientDataSet;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Search(AKeyword: string);
  end;

var
  DataModule9: TDataModule9;

implementation

{%CLASSGROUP 'FMX.Controls.TControl'}

{$R *.dfm}

{ TDataModule9 }

procedure TDataModule9.Search(AKeyword: string);
begin
    RESTRequest1.Params.ParameterByName('query').Value := AKeyword;
    RESTRequest1.Execute;
end;

위의 RESTRequest1.Params를 변경하고 실행(RESTRequest1.Execute;)하는 동작으로 요청 파라메터를 변경할 수 있습니다.

UI 추가

검색 키워드 입력을 위해  TEdit를 Form에 추가합니다.(가끔 ListView에 추가하는 경우가 있으니 주의하세요)

align 속성을 "alTop"으로 변경합니다.


Edit의 OnChange에 아래와 같이 코딩합니다.

procedure TForm8.Edit1Change(Sender: TObject);
begin
  DataModule9.Search(Edit1.Text);
end;

배포 및 확인

REST 컴포넌트를 이용한 경우 내부적으로 MIDAS를 이용하기 때문에 MIDAS Library를 함께 배포해야 합니다.

배포 메뉴에서 기능파일 추가(Project > Deployment > Add featured files) 메뉴를 이용해 MIDAS Library를 추가합니다.



기기배포 등의 확인 단계는 설명을 생략하니 각자의 디바이스에서 확인해 보시기 바랍니다.


목록표시 및 요청 등의 인터페이스를 설명하였습니다. 등록요청 등의 인터페이스는 위의 내용을 조금더 확장하시면 충분히 구현가능 하실 것 같습니다.


다음에는 XML을 이용한 외부 서비스 연동에 대해서도 살펴보도록 하겠습니다.


감사합니다.


관련정보


추가정보



    저작자 표시 비영리 동일 조건 변경 허락
    신고

    험프리.김현수 파이어몽키 Firemonkey, FMX, JOSN, REST Debugger, RESTCilient, RESTful, 파이어몽키