Search results for '파이어몽키'

  1. 2014.12.03 -- [XE5~XE7] FGX 컴포넌트 소개(오픈소스) - ProgressDialog, LinkedLabel 등
  2. 2014.12.03 -- 안드로이드 5.0(Lollipop)에서 실행 시 오류대응 방법
  3. 2014.12.03 -- [XE7] 자체적으로 원격푸쉬알림(GCM, APN) 전송 구현방법 (8)
  4. 2014.12.01 -- 파이어몽키 안드로이드 네이티브 컴포넌트(오픈소스) - DPF
  5. 2014.12.01 -- 파이어몽키 iOS 네이티브 컴포넌트(오픈소스) - DPF
  6. 2014.12.01 -- 엔터프라이즈 DBMS에 직접 접속할 수 있는 방법(컴포넌트 소개)
  7. 2014.11.25 -- 구글 매터리얼 아이콘 753종
  8. 2014.11.21 -- 안드로이드 라이브러리(jar 파일) 활용 사례(안드로이드 열기 대화상자 구현)
  9. 2014.11.10 -- [앱테더링] VCL앱을 모바일앱으로 쉽게 확장할 수 있는 앱테더링 자세히 살펴보기! (7)
  10. 2014.11.05 -- 여러분의 앱에서 클라우드 서비스에 연결하세요.(REST Client이용)
  11. 2014.11.05 -- 동영상강좌) 코드아카데미: 앱개발에 집중하고, 백엔드는 클라우드에 맡기세요!
  12. 2014.11.05 -- 블루투스 LE와 클라우드를 이용한 수화물 무게 기록 앱 샘플
  13. 2014.11.04 -- 안드로이드 기기에 설치된 앱 목록표시와 실행하기
  14. 2014.11.04 -- RAD Studio XE7에서 추가된 안드로이드 기능 익히기(동영상)
  15. 2014.11.04 -- RAD Studio XE7의 TListView에서 당겨서 새로고침 구현 샘플 (1)
  16. 2014.11.03 -- 파이어몽키 커스텀 스타일 제작 따라하기 (1)
  17. 2014.11.03 -- [XE7] 안드로이드 브릿지 파일을 생성할 수 있는 Java2OP.exe을 다운로드 하세요.
  18. 2014.10.24 -- 웹브라우저를 지원하지 않는 플랫폼(윈도우, OS X)에서 웹브라우저 지원하기
  19. 2014.10.22 -- FMX 리스트박스를 정렬하고 필터링하는 내용 설명
  20. 2014.10.21 -- 내가 원하는 이름으로 모바일 앱의 이름 변경하기

[XE5~XE7] FGX 컴포넌트 소개(오픈소스) - ProgressDialog, LinkedLabel 등

2014.12.03 10:14

러시아의 개발자(Бровин Ярослав)가 오픈소스로 공개한 컴포넌트를 소개합니다.

라이선스는 MPL 2.0(소스코드 변경 시 오픈, 사용 시 오픈하지 않아도 됨)

  • TfgProgressDialog, TfgActivityDialog이 - 긴 작업의 진행 상태를 표시합니다 (아이폰 OS, 안드로이드) 
  • TfgVirtualKeyboard - 가상 키보드와 단순화 된 작업 (아이폰 OS, 안드로이드) 
  • TfgActionSheet이 - 페이지 작업을 선택합니다 (http://fire-monkey.ru/topic/23-kak-sdelat-panel-dlia-vybora-deistvii-na-podob/ ) 
  • TfgGradientEdit - 그라데이션을 설정하기위한 더 나은 제어 
  • TfgColorsPanel - 색상의 설정은, 사용자가 색상을 선택할 수 있습니다. 
  • TfgLinkedLabel - 링크를 표시합니다. 링크를 클릭하면 표준 브라우저에서 열립니다으로 (모든 플랫폼을 지원합니다)
  • Style 생성 시 필요한 오브젝트 컴포넌트 등록

다운로드(XE5, XE6, XE7): 

 - http://fire-monkey.ru/topic/83-fgx-indikatciia-khoda-vypolneniia-dlitelnykh-operatci/



컴포넌트도 좋지만 내부에 구현된 소스를 참고하면 실력향상에 도움이 될겠습니다.

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

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

안드로이드 5.0(Lollipop)에서 실행 시 오류대응 방법

2014.12.03 10:02

안드로이드의 새로운 운영체제인 롤리팝에서 앱 실행 시 스플래쉬 이미지 이후 예외가 발생해 앱이 정상 구동되지 않는 이슈가 발생하고 있습니다.


간단하게 안내해 드리면

안드로이드 5.0(롤리팝)에서 앱 구동 시 EBitmapLoadingFailed 오류가 발생합니다. 해당 오류는 *.fmx에 포함된 TBitmap 데이터를 LoadFromStream으로 읽어 올때 발생하는 것으로 보이며, 해결 방안은 Image등의 컴포넌트에 등록된 이미지를 파일로 배포 후 동적으로 읽어 들이는 방법으로 해결할 수 있습니다.


아래 원문에서는 위 작업을 자동화 할 수 있는 팁과 관련 소스를 제공하며, 더 자세한 내용을 확인할 수 있습니다.

(이탈리아어 이므로 구글 번역기를 통해 번역해서 보시기 바랍니다.)

참고 글

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

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

[XE7] 자체적으로 원격푸쉬알림(GCM, APN) 전송 구현방법

2014.12.03 09:43

스페인의 델파이 개발자(fgonzalez.visiblogs.com/)가 자체적으로 원격푸쉬 알림 기능을 구현한 동영상을 소개합니다.


RAD Studio에서 원격 푸쉬 알림(Remote Push Notification)을 구현하기 위해서는 XE6 버전에 추가된 BaaS 클라이언트 컴포넌트를 통해 가능했는데요. 

이 동영상에서는 IdHttp(안드로이드), TCPClient(iOS) 컴포넌트 등을 활용해 푸쉬 메시지를 전송하고, System.PushNotification 클래스를 활용해 푸쉬 메시지를 수신하는 내용을 소개합니다.


동영상은 스페인어로 이야기를 합니다. 팁을 드리면 유투브의 자막을 한국어로 설정하고 화면과 코드위주로 보시면 충분히 이해할 수 있습니다.


참고 글


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

험프리.김현수 파이어몽키 APN, Firemonkey, gcm, ios, push, Remote Push Notification, 안드로이드

  1. Blog Icon
    석만근

    와우 감사합니다.
    전 서버를 웹페이지로 구현하고 Post방식으로 날렸는데 바로 날리네요;; 구글로 ㅎㅎ
    그리고 왠지 될것 같은데.... 당채 말을 알아들을수가 없네요
    감사합니다. 도움이 많이 될듯합니다.

  2. 그래도 개발자들에게는 코드가 있어 위안이 됩니다^^
    시도해 보시고 팁될만한 것 있으면 공유해주세요.
    감사합니다.^^

  3. Blog Icon
    오진성

    감사합니다 ^^
    잘되네요 근데 궁금증이있는데요
    message를 한글로 보내면 한글이 깨져서 나오든데 ... 어떻게 해결해야하나요 ?

  4. Blog Icon
    정상언

    한글 깨지는 분 저도 고생 좀 했는데
    AData := TStringStream.Create(AJson.ToString) 이부분을

    다음 처럼 하면 되네요
    AData := TStringStream.Create(AJson.ToJSON);

  5. Blog Icon
    키위

    영상을 통해 푸쉬 메세지 전송에 성공 했습니다.
    그런데 푸쉬를 여러개 받으면 받은만큼 아이콘과 알림이 생기는데
    이걸 어떻게 아이콘 하나에 "x개 메세지"로 만들수 있을까요?...
    여기저기 검색을 해봐도 통.. 찾을 수가 없네요.
    보내는놈, 받는놈, manifest file, 서비스.. 어디를 건드려야 하는지도 감이 안잡히네요.ㅡㅡ

  6. Blog Icon
    난다요

    푸시연구 중인데 도저히 모르겠어서 질문올립니다.

    여기 홈페이지에서 동영상 보면서 만들고 있는데요

    다른건 다 이해가 가는데

    DeviceToKen := '';

    이 디바이스토큰값을 어디서 가져오는지 모르겠습니다.

    혹시 아시는분은 자세히 설명좀 부탁드립니다. ㅜㅜ

  7. Blog Icon
    하이요

    종료시에 push를 받고싶은데
    그럴려면 안드로이드 스튜디오의 경우 gradle 파일을 수정하던데...
    델파이에서는 어떻게 해야하나요?

  8. 다음글을 참고해 종료 이벤트를 감지해보세요.
    WillTerminate 이벤트에 푸쉬를 발생하세요.
    http://blog.hjf.pe.kr/114

    푸쉬를 발생하는 내용은 아래 링크를 참고하세요.
    http://docwiki.embarcadero.com/RADStudio/Berlin/en/Mobile_Tutorial:_Using_Notifications_(iOS_and_Android)

파이어몽키 안드로이드 네이티브 컴포넌트(오픈소스) - DPF

2014.12.01 10:42

파이어몽키 멀티-디바이스 앱 개발의 장점은 하나의 소스코드로 여러개의 플랫폼을 개발할 수 있다는 것입니다.

그리고, 또다른 장점은 필요한 경우 네이티브 API와 SDK를 사용할 수 있다는 장점도 있습니다.


위 장점을 최대한 활용한 오픈소스 프로젝트를 소개합니다.

이 오픈소스 프로젝트에서는 안드로이드 네이트브 기능(SDK, API)를 이용해 네이티브 UI와 기능을 갖는 컴포넌트를 제공합니다.

만약, 안드로이드 전용 앱을 만드는 경우 해당 오픈소스를 활용한다면, 기본 컴포넌트 외에도 더 풍부한 컴포넌트를 이용해 앱을 만들 수 있습니다.


Some components:
+ Added TDPFJAlertDialog
+ TDPFJAnalogClock
+ TDPFJButton
+ TDPFJCheckBox
+ TDPFJChronometer
+ TDPFJDatePicker
+ TDPFJDatePickerDialog
+ TDPFJEditText
+ TDPFJImageView
+ TDPFJListView (not completed)
+ TDPFJProgressBar
+ TDPFJProgressDialog
+ TDPFJTextView
+ TDPFJTimePickerDialog
+ TDPFJToast
+ TDPFJView
+ TDPFJRadioButton
+ TDPFJNumberPicker
+ TDPFJSeekBar
+ TDPFJTabHost Component (Tabbed view)
+ TDPFJSpinner Component (Dropdown list)
+ TDPFJTextSwitcher Component (Fade/Slide Texts)
+ TDPFJTextClock
+ TDPFJWebView


그리고, XE5 부터 꾸준히 업그레이드를 제공하고 있는 것도 큰 장점으로 꼽을 수 있습니다.


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

험프리.김현수 파이어몽키 dpf, 네이티브, 안드로이드, 컴포넌트

파이어몽키 iOS 네이티브 컴포넌트(오픈소스) - DPF

2014.12.01 10:35

파이어몽키 멀티-디바이스 앱 개발의 장점은 하나의 소스코드로 여러개의 플랫폼을 개발할 수 있다는 것입니다.

그리고, 또다른 장점은 필요한 경우 네이티브 API와 SDK를 사용할 수 있다는 장점도 있습니다.


위 장점을 최대한 활용한 오픈소스 프로젝트를 소개합니다.

이 오픈소스 프로젝트에서는 iOS 네이트브 기능(SDK, API)를 이용해 네이티브 UI와 기능을 갖는 컴포넌트를 제공합니다.

만약, 안드로이드 전용 앱을 만드는 경우 해당 오픈소스를 활용한다면, 기본 컴포넌트 외에도 더 풍부한 컴포넌트를 이용해 앱을 만들 수 있습니다.


Some Wrapped Frameworks:
* AddressBookUI.framework
* AddressBook.framework
* iAd.framework
* EventKit.framework
* GameKit.framework
* MapKit.framework
* MessageUI.framework
* MobileCoreServices.framework
* QuickLook.framework
* SystemConfiguration.framework
* Social.framework
* StoreKit.framework
* WebKit.framework

그리고, XE5 부터 꾸준히 업그레이드를 제공하고 있는 것도 큰 장점으로 꼽을 수 있습니다.

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

험프리.김현수 파이어몽키 dpf, ios, 네이티브, 컴포넌트

엔터프라이즈 DBMS에 직접 접속할 수 있는 방법(컴포넌트 소개)

2014.12.01 10:13

모바일 앱에서 엔터프라이즈 DBMS(SQL Server, Oracle, Interbase Server 등)에 접속하기 위해서는 멀티티어 기술을 이용하는 것이 효과적입니다.


모바일 앱은 모바일 특성상 작은 하드웨어 자원을 사용하고, 연결이 보장되지 않은 네트워크를 이용합니다.

그래서 앱에서는 필요한 최소한의 데이터만 받아 처리하는 것이 효과적이고, 언제 끊어 질지 모르는 네트워크 상에서 트랜젝션을 처리하기 위해서는 예외처리에 많은 노력이 들어갈 것입니다.


위의 이유로 모바일에서 엔터프라이즈 데이터 이용을 위해서는 멀티티어 환경으로 서버에서 모바일을 관리하는 것이 효과적입니다. 

델파이를 이용한 모바일 앱에서는 데이터 스냅 또는 REST 클라이언트 기술을 이용해 멀티티어를 이용할 수 있습니다.


하지만, 

네트워크 연결이 보장된 일부 환경에서는 2티어 방식으로 모바일 앱에서 직접 DBMS에 접속할 수는 몇가지 방안이 있습니다.


첫째, FireDAC 컴포넌트를 이용해 InterBase Server에 접속 할 수 있습니다.

둘째, ODAC, SDAC 등의 외부 컴포넌트를 이용해 TCP/IP 기반으로 각 서버 컴포넌트를 이용할 수 있습니다.

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

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

구글 매터리얼 아이콘 753종

2014.11.25 22:24

구글에서 공개한 753종의 매터리얼 아이콘입니다. 모바일 앱 개발 시 유용하게 사용할 수 있습니다.



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

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

안드로이드 라이브러리(jar 파일) 활용 사례(안드로이드 열기 대화상자 구현)

2014.11.21 10:35

파란크리스마스 블로그를 운영하시는 파란산타님께서 안드로이드 라이브러리를 활용해 열기 대화상자를 구현한 내용이 있어 공유합니다.(안드로이드 라이브러리 사용하는 내용을 아주 쉽게 정리해 주셨습니다.)


본문에서는 

파이어몽키의 안드로이드 플랫폼에서는 열기 대화상자(TOpenDialog)를 제공하지 않기 때문에 오픈소스인 android-file-dialog의 라이브러리(*.jar)를 이용해 열기 대화상자를 구현한 내용입니다.

(아래 내용을 참고하시면 직접 만든 안드로이드 라이브러리를 델파이에서 사용하는 방안을 익힐 수 있습니다.)


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

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

[앱테더링] VCL앱을 모바일앱으로 쉽게 확장할 수 있는 앱테더링 자세히 살펴보기!

2014.11.10 18:35

앱테더링(App Tethering)?

앱 테더링은 2개의 개별적인 앱을 서로 연결(테더링)해서 데이터를 주고 받을 수 있는 기술입니다.

앱테더링 기술을 이용해 VCL어플리케이션에서 모바일로 데이터를 제공하면 모바일에서 뷰어만 빠르게 만들어 아주 빠르고 쉽게 모바일앱을 개발할 수 있습니다.

(모바일 앱의 동작을 다시 VCL 앱으로 전송해 사용자의 액션과 모바일 이미지등을 VCL 앱에서 사용하면 더 강력한 시스템으로 탈바꿈할 수 있습니다.)

❑ 앱테더링 컴포넌트

앱 테더링은 TTetheringManager, TTetheringAppProfile 두개의 컴포넌트를 통해 구현할 수 있습니다. 이번글에서는 각 컴포넌트의 자세한 속성과 이벤트에 대해서는 다루지 않습니다. 하지만 아래의 "앱테더링 데모를 통해 기능 살펴보기" 단계를 보시면 주요한 대부분의 속성과 이벤트를 다루고 있기 때문에 충분히 기능을 익힐 수 있습니다.

더 자세히 알고 싶은 기능(속성, 이벤트)는 엠바카데로 기술 도움말(영문)을 통해서 익혀보시기 바랍니다.

아래는 앱테더링 기술이 제공하는 대표적인 속성입니다.

앱테더링의 대표 기능

  • 동일한 서브넷에서 동반자앱 자동탐색 기능(P2P기반으로 별도의 서버 구성이 필요하지 않습니다.)
  • 지정한 IP / 지정한 서브넷(192.168.1.0: 192.168.1.1 ~ 192.168.1.255)에서 탐색 시도
  • 블루투스 기반 앱테더링
  • String / Stream 기반 데이터 전송 기능 제공(Stream이므로 사실상 모든 데이터 전송 가능)
  • 동반자앱에 공개된 Action(명령)을 원격에서 호출하는 Remote Action 기능제공
  • VCL / FMX 2개의 프레임워크 지원
    • VCL 앱을 모바일과 연결해 쉽게 모바일로 전환/확장 할 수 있는 가능성 제공
    • 모바일에서 센서를 연결하면 VCL앱을 IoT로 바로 확장 가능
아래 데모영상을 통해 여러분들의 가능성을 만들어 보시기 바랍니다.

앱테더링 데모를 통해 기능 살펴보기

아래 데모영상은 VCL 어플리케이션을 모바일 앱으로 확장하기 위해 앱테더링 기술의 가장 기본적인 부분을 설명합니다. 

데모영상을 보시고 기능을 익히신 후 앱테더링 기능을 여러분의 프로젝트에 도입하면 어떤 기능을 확장할 수 있을지 생각해 보시고 여러분의 제품에 적용해보시기 바랍니다.


위 데모는 총 9개의 (최소한의 기능의)단계를 통해 진행합니다.

  • 탐색과 접속
    • 1단계, 동일 서브넷에서 접속대상 탐색시도
    • 2단계, 탐색된 테더링 매니저 표시
    • 3단계, 선택 매니저와 연결(페어링), 비밀번호 인증
    • 4단계, 탐색된 테더링 프로필 표시
    • 5단계, 선택 페어링과 연결(페어링)
  • 데이터 송수신
    • 6단계, 문자열 데이터 전송
    • 7단계, 데이터 수신하기(문자열, 스트림)
    • 8단계, 이미지(스트림) 데이터 전송
    • 9단계, 원격지에 정의된 액션(명령) 호출

1, 동일 서브넷에서 접속대상 탐색시도하기

테더링매니저의 DiscoverManagers 메소드를 통해 주변(동일 서브넷)의 동반자 앱을 탐색합니다.

procedure TForm2.btnDiscoverManagerClick(Sender: TObject);
begin
  InitControls;

  LogAndInfo('동일 서브넷에서 접속대상을 찾습니다.');
  // (#1) 주변에서 TetheringManager 발견명령
  TetheringManager.DiscoverManagers;

  // (#2) TetheringAppProfile의 Group 기반으로 자동 연결
//  TetheringManager.AutoConnect(3000);

  //  (#3) 대상을 지정해 접속할 수 있습니다.
//  TetheringManager.DiscoverManagers(3000, 127.0.0.1);
end;

AutoConnect(#2, TetheringAppProfile의 Group이 동일한 대상으로 자동 접속), 접속 대상을 지정(#3)등 다양한 접속 방식을 제공합니다.

2, 발견된 테더링 매니저 정보표시

탐색(DiscoverManagers)이 완료되면 TetheringManager의 OnEndManagersDiscovery 이벤트가 발생하고, ARemoteManagers 파라메터를 통해 탐색된 매니저정보를 제공합니다.

procedure TForm2.TetheringManagerEndManagersDiscovery(const Sender: TObject;
  const ARemoteManagers: TTetheringManagerInfoList);
var
  Info: TTetheringManagerInfo;
begin
  cbxRemoteManagers.Items.Clear;
  for Info in ARemoteManagers do
  begin
    Log(Format('[검색된 매니저]'#13#10#9'%s'#13#10#9'%s'#13#10#9'%s'#13#10#9'%s', [
      Info.ManagerIdentifier,
      Info.ManagerName,
      Info.ManagerText,
      Info.ConnectionString
    ]));
    cbxRemoteManagers.Items.Add(Format('%s(%s)', [Info.ManagerText, Info.ConnectionString]));
  end;
  if cbxRemoteManagers.Items.Count > 0 then
  begin
    cbxRemoteManagers.ItemIndex := 0;
    btnPairManager.Enabled := True;
  end;
  LogAndInfo(Format('접속 대상이 [%d]건 발견되었습니다.', [ARemoteManagers.Count]));
end;

3, 선택한 매니저와 연결(페어링)

접속할 대상 매니저를 선택 후 페어링(PairManager)을 시도합니다.

// 선택한 매니저와 연결
procedure TForm2.btnPairManagerClick(Sender: TObject);
var
  N: Integer;
begin
  if cbxRemoteManagers.ItemIndex < 0 then
    Exit;

  N := cbxRemoteManagers.ItemIndex;
  LogAndInfo(TetheringManager.RemoteManagers[N].ManagerText + ' - 매니저와 페어링 시도');
  TetheringManager.PairManager(TetheringManager.RemoteManagers[N]);
end;

// 매니저 비밀번호 설정
procedure TForm2.TetheringManagerRequestManagerPassword(const Sender: TObject;
  const ARemoteIdentifier: string; var Password: string);
begin
  Password := edtPassword.Text;

  TThread.Synchronize(TThread.CurrentThread,
    procedure begin
      LogAndInfo('[비밀번호 요청] - ' + edtPassword.Text);
    end);
end;

매니저간 페어링 시도 시 서로의 비밀번호를 통해 연결을 허용합니다. 만약 매니저간의 비밀번호가 맞지 않다면, TetheringManager 컴포넌트에서 인증오류(OnAuthErrorFromLocal, OnAuthErrorFromRemote) 이벤트가 발생하고 페어링은 실패합니다.

비밀번호는 TetheringManager.Password 속성을 통해서도 설정할 수 있습니다.

4, 발견된 테더링 프로필 정보표시

매니저간 연결(페어링)되면 TetheringManager의 OnEndProfilesDiscovery 이벤트가 발생되며 ARemoteprofiles 파라메터를 통해 탐색된 프로필 정보를 제공합니다.

// 프로필 발견완료 이벤트
procedure TForm2.TetheringManagerEndProfilesDiscovery(const Sender: TObject;
  const ARemoteProfiles: TTetheringProfileInfoList);
var
  Info: TTetheringProfileInfo;
begin
//  Log('TetheringManagerEndProfilesDiscovery');
  cbxRemoteProfiles.Items.Clear;
  for Info in ARemoteProfiles do
  begin
    Log(Format('[앱 프로필]'#13#10#9'%s'#13#10#9'%s'#13#10#9'%s'#13#10#9'%s'#13#10#9'%s', [
      Info.ManagerIdentifier,
      Info.ProfileIdentifier,
      info.ProfileText,
      Info.ProfileGroup,
      Info.ProfileType

    ]));
    cbxRemoteProfiles.Items.Add(Format('%s(%s)', [Info.ProfileText, Info.ProfileType]));
  end;
  if cbxRemoteProfiles.Items.Count > 0 then
  begin
    cbxRemoteProfiles.ItemIndex := 0;
    btnPairProfile.Enabled := True;
  end;
  LogAndInfo(Format('대상 프로필 [%d]건 발견되었습니다.', [ARemoteProfiles.Count]));
end;

5, 선택한 프로필과 연결

접속할 대상 프로필을 선택(TetheringAppProfile.Connect)하여 페어링 시도합니다.

// 선택한 프로필과 연결
procedure TForm2.btnPairProfileClick(Sender: TObject);
var
  N: Integer;
begin
  if cbxRemoteProfiles.ItemIndex < 0 then
    Exit;

  N := cbxRemoteProfiles.ItemIndex;
  LogAndInfo(TetheringManager.RemoteProfiles[N].ProfileText + ' - 프로필과 페어링 시도');
  if TetheringAppProfile.Connect(TetheringManager.RemoteProfiles[N]) then
  begin
    LogAndInfo('페어링 성공!!');
    InitControls;
  end;
end;

페어링이 완료되면 데이터 전송, 데이터 수신, 원격 액션 호출등의 작업이 가능해 집니다.

6, 문자열 전달

TetheringAppProfile.SendString 메소드를 통해 명령어, 데이터등의 문자열 데이터를 전달할 수 있습니다.

procedure TForm2.btnSendStrHelloClick(Sender: TObject);
begin
  LogAndInfo('문자열 전달 - 동반자 모바일앱에 Hello 전달');
  TetheringAppProfile.SendString(
    TetheringAppProfile.ConnectedProfiles.First,
    'HELLO',
    '안녕? App Tethering!!!');
end;

procedure TForm2.btnSendStrRSClick(Sender: TObject);
begin
  LogAndInfo('문자열 전달 - 동반자 모바일앱에 ReverseString 전달');
  TetheringAppProfile.SendString(
    TetheringAppProfile.ConnectedProfiles.First,
    'ReverseString',
    '반갑습니다.');
end;

SendString 메소드는 3개의 파라메터를 전달합니다.

  1. 전송할 앱 프로필 객체
  2. 수신 시 리소스의 힌트로 받을 수 있는 설명(Description)
  3. 문자열 데이터 값
ReverseString 문자열 데이터는 상대방(모바일 앱)에서 수신 시 글자를 뒤집어(반갑습니다. > .다니습갑반) 다시 전송하도록 구현되었습니다.

7, 데이터 수신

상대방 동반자앱에서 데이터를 보내면 TetheringAppProfile의 OnResourceReceived 이벤트를 통해 데이터를 수신할 수 있습니다. 문자열 데이터, 이미지 데이터(Stream)등이 모두 OnResourceReceived 이벤트를 통해 수신합니다.

procedure TForm2.TetheringAppProfileResourceReceived(const Sender: TObject; const AResource: TRemoteResource); begin case AResource.ResType of // 데이터(SendString) TRemoteResourceType.Data: begin // ReverseString을 받은 모바일에서 전송한 응답 if AResource.Hint = 'EchoString' then LogAndInfo('EchoString : ' + AResource.Value.AsString) end; // 스트림(SendStream) TRemoteResourceType.Stream: begin // 모바일에서 전송한 이미지 if AResource.Hint = 'FMXIMG' then begin LogAndInfo('이미지 수신'); LoadImage(AResource.Value.AsStream); end; end; end; end;

AResource 파라메터 주요 속성

  • AResource.ResType
    • SendString으로 전송 시 TRemoteResourceType.Data로 SendStream으로 전송 시 TRemoteResourceType.Stream으로 수신
  • AResource.Hint
    • SendString과 SendStream의 Description 파라메터에 입력한 값을 담고 있습니다.
  • AResource.Value
    • SendString과 SendStream의 Value(AString, AStream)에 입력한 값을 담고 있습니다.

8, 데이터 전달 - 이미지전송

이미지, 파일 등의 데이터를 TStream으로 변환해 동반자 앱으로 전달 할 수있습니다.(TStream은 TMemoryStream, TFileStream, TStringStream 등의 부모클래스이므로  다양한 데이터를 전달할 수 있습니다.)

procedure TForm2.btnSendStreamImageClick(Sender: TObject);
var
  Stream: TMemoryStream;
begin
  LogAndInfo('데이터 전달 - 이미지 데이터를 TStream으로 동반자 모바일앱에 전달');
  Stream := TMemoryStream.Create;
  try
    Image1.Picture.Graphic.SaveToStream(Stream);
      TetheringAppProfile.SendStream(TetheringManager.RemoteProfiles.First,
      'VCLIMG',
      Stream
    );
  finally
    Stream.Free;
  end;
  PageControl1.TabIndex := 2;
//  TetheringAppProfile.SendStream()
end;

9, 원격지의 명령 호출(이미지 전송 요청) 

TetheringAppProfile.RunRemoteAction 메소드를 통해 원격지에 공개된 Action을 실행 할 수 있습니다.

// 원격지의 액션 호출
procedure TForm2.btnRunRemoteActionClick(Sender: TObject);
begin
  LogAndInfo('원격 명령 호출 - 원격지(동방자 모바일 앱)의 ActionSendImg 액션 호출');
  TetheringAppProfile.RunRemoteAction(
    TetheringManager.RemoteProfiles.First,
    'ActionSendImg'
  );
  PageControl1.TabIndex := 3;
end;

모바일 앱의 TetheringAppProfile에는 Actions 속성에 아래와 같이 Action이 등록되어 있습니다.

TetheringAppProfile의 Actions에 등록된 Action(명령)은 외부로 공개(IsPublic)할 수 있어 외부에서 RunRemoteAction 메소드를 통해 호출할 수 있습니다.

❑ 위 데모 소스코드 받기

앱테더링 데모 더 살펴보기...

RAD Studio XE7의 샘플 프로젝트에는 아래의 다양한 앱테더링 데모가 있습니다.

  • 앱테더링 샘플 프로젝트 경로

    • C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Object Pascal\RTL\Tethering

❑ BDShoppingList

  • 앱테더링 기술을 이용해 데스크탑의 쇼핑 데이터를 모바일에 제공합니다.

  • 모바일 화면에서 쇼핑항목의 구매를 선택하면 구매명령을 데스크탑으로 전달해 구매처리를 완료합니다.

  • 데스크탑과 모바일은 변경된 데이터를 수시로 동기화합니다.

  • http://docwiki.embarcadero.com/CodeExamples/XE7/en/RTL.BDShoppingList_Sample

❑ DesktopCast

❑ MediaPlayer

❑ PhotoWall


참고 글




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

    험프리.김현수 파이어몽키 app tethering, Rad Studio, XE7, 앱테더링

    1. Blog Icon
      좋은남자

      이건 다른 질문인데요.. VCL 폼의 디자인이 깔끔한데.. 어디서 바꾸신 건가요? 데모 소스를 받아서 보니 Project - Option - Application - Appearance 에서 바꾸신 것 같지 않은데요..궁금합니다.

    2. VCL 스타일을 바꾼 것입니다. 해당 스타일은 프리미엄 스타일로 XE7 사용자들은 무료로 다운로드 및 사용할 수 있습니다.
      http://blog.hjf.pe.kr/253

    3. Blog Icon
      황영일

      안녕하세요. 반갑습니다. 앱테더링 데모에서 블루투스 아답터 설정하고 하면 접속대상를 찾지못합니다. 어떻게 하는지 알려주시면 감사 감사

    4. 혹시 페어링 하셨나요? 블루투스틑 페어링 된 상태에서 데이터를 주고 받을 수 있습니다.

    5. Blog Icon
      황영일

      블루투스 페어링도 해보았습니다. 안됩니다.
      network 테더링 하면 잘됩니다.
      아래것이 대한 것이 더궁금해서 몇자적습니다.
      클래식 블루투스및 블루투스 샘플을 테스트 하는데 페어링도 되고 서비스도 맞추었는데 소켓에 send하고 read할때 8바이트 보내면 read시 8바이트 길이가 나오는데 실제 데이터는 null입니다. xe7 샘플소스 그대로라 잘되야 될것 같은데 제가 뭘잘못했는지 이해가 되지 않습니다. 환경적인 요인인지 맨붕입니다. 도와주세요 ㅠㅠ

    6. Blog Icon
      푸름

      안녕하세요?
      항상 좋은 글 감사드립니다
      다름이 아니오라 앱테더링이라는게
      예제에서는 모바일과 윈도우인데
      모바일(안드로이드)-모바일(안드로이드)도 가능한가요?
      기본적으로 하고 싶은것은 다른 모바일의 특정폴더에서 이미지나 동영상을 가져오는걸 하고 싶습니다.

    7. 네 모바일과 모바일간에도 사용 가능합니다.

    여러분의 앱에서 클라우드 서비스에 연결하세요.(REST Client이용)

    2014.11.05 11:33

    최근 다양한 웹서비스와 클라우드에서 JSON 기반의 RESTFul 인터페이스를 제공합니다.


    오늘은 짐매키트가 발표한 동영상을 통해 REST 클라이언트로 클라우드 서비스에 연결하는 내용을 소개합니다.

    짐은 대표적인 클라우드 서비스인 드랍박스에 REST 클라이언트 라이브러리를 통해 모바일앱에서 연결하는 데모를 진행합니다.

    이 글에서는 아래 내용을 포함합니다.

    • 레스트 디버거(RESTFul 사이트 분석 도구)를 통한 웹사이트 분석
    • 클라우드 서비스(드랍박스) 연동
      • TOAuth1Authenticator 컴포넌트를 이용한 OAuth 1.0 인증과정 소개

    아래의 동영상을 통해 여러분의 앱에서 클라우드 서비스(드랍박스)에 연결하는 방법을 익혀 보시기 바랍니다.


    관련글


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

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

    동영상강좌) 코드아카데미: 앱개발에 집중하고, 백엔드는 클라우드에 맡기세요!

    2014.11.05 11:18

    지난 2014년 7월에 제가 진행했던 코드아카데미 동영상입니다.


    모바일 백엔드 서비스(BaaS)에 대한 개념과 사용하는 방법을 데모와 함께 진행합니다.

    여러분의 앱에 클라우드를 연결해 백엔드 개발에 대한 부담을 덜어보세요.


    총 4편으로 구성되었습니다.

    • BaaS와 Kinvey 자세히 알아보기
    • 사용자관리-사용자 인증과 관리방법
    • 클라우드 기반 스토리지
    • 푸쉬알림 사용하기




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

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

    블루투스 LE와 클라우드를 이용한 수화물 무게 기록 앱 샘플

    2014.11.05 11:13

    여행을 할때 짐을 챙기는 것도 중요하지만 정해진 수화물 무게를 맞추는 것도 중요합니다.^^

    어떤 물품이 얼마나 나가는지 기록하면 수화물 무게를 계산할때 아주 유용하겠네요.


    이번 글에서는 블루투스 LE를 지원하는 저울(Wahoo Balace scale)과 연동해 수화물 무게를 얻어와 클라우드에 저장하는 모바일 앱을 RAD Studio XE7으로 만드는 샘플을 소개합니다.



    이 앱은 총 3개의 탭으로 구성되었습니다.

    • Weight Scale - 수화물 무게를 표시하고 수화물의 내용을 저장
    • Logged Data - 기존의 수화물 데이터를 검색하고 목록을 표시
    • Settings - 블루투스 데이터를 표시

    다양한 UI 구성요소와 TBluetoothLE 컴포넌트, BaaS 컴포넌트가 포함되었고 TStyleBook(custom jet style)을 이용해 스타일을 구성했습니다.

    • TKinveyProvider (AppKey, AppSecret, MasterSecret는 Kinvey.com의 계정과 연결) 
    • TBackendQuery (TKinveyProvider 연결) 
    • TBackendStorage (TKinveyProvider 연결) 
    • TRestResponseDataSetAdapter 
    • TFDMemTable



    이후의 화면 구성과 소스코드는 아래의 원문을 통해 확인하시기 바랍니다.


    클라우드 서비스(BaaS) 사용하는 방법은 아래 관련글의 동영상강좌를 들어보시면 많은 도움이 됩니다.


    관련글



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

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

    안드로이드 기기에 설치된 앱 목록표시와 실행하기

    2014.11.04 11:53

    파이어몽키 개발자 커뮤니티 네이버 카페(http://cafe.naver.com/delphifmx)에서 가을이다 님이 올려주신 내용입니다.

    (RAD Studio 모바일(멀티-디바이스) 개발에 관심이 있으시면 반드시 가입해야 하는 까페입니다. 가입하세요.)


    안드로이드 기기에 설치된 앱의 목록을 표시하고 앱을 실행하는 예제입니다.


    uses
      Androidapi.JNI.GraphicsContentViewText,
      Androidapi.JNI.JavaTypes,
      FMX.Helpers.Android,
      AndroidApi.Helpers,
      Androidapi.JNIBridge;
    
    // 중략
    
    var
      PM: JPackageManager;
      mainIntent: JIntent;
      LaunchIntent: JIntent;
      pkgAppsList: JList;
      ri: JResolveInfo;
      iter: JIterator;
      midlist : TStringList;
    begin
      PM := SharedActivityContext.getPackageManager;
      mainIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_MAIN, nil);
      mainIntent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
      pkgAppsList := PM.queryIntentActivities(mainIntent, 0);
      midlist := TStringList.Create;
      iter := pkgAppsList.iterator;
      while iter.hasNext do
      begin
        ri := TJResolveInfo.Wrap((iter.next as ILocalObject).GetObjectID);
        mIdList.Add(JStringToString(ri.activityInfo.applicationInfo.packageName));
      end;
      LaunchIntent := PM.getLaunchIntentForPackage(StringToJString(mIdList[2]));
    
    // 해당을 실행하려면 아래처럼,..,
    // SharedActivityContext.startActivity( LaunchIntent )
    
      showmessage(  mIdList.Text );
    end;

    댓글에서 수달님 께서 안드로이드 2.3.4 버전에서 정상동작을 확인하셨고, uses 절을 알려주셔서 포함했습니다.


    참고






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

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

    RAD Studio XE7에서 추가된 안드로이드 기능 익히기(동영상)

    2014.11.04 11:32

    RAD Studio XE7에서 다양한 안드로이드 기능 추가/개선 되었습니다.

    아래 동영상을 통해서 개선된 내용에 대한 소개와 몇가지 기능은 데모로 자세히 설명합니다.

    • 안드로이드 스플래쉬 스크린
    • 안드로이드 몰입모드(전체화면)
    • 안드로이드 라이브러리(JAR, Java class)를 RAD Studio에서 사용하는 Java2OP.exe 사용방법



    RAD Studio XE7에서 추가된 대표적인 안드로이드 기능은 아래와 같습니다.

    • 구글 모바일 광고 SDK(XE6에서도 Hotfix로 변경)
    • 몰입모드-전체화면(안드로이드 KitKat 4.4 이상)
    • 안드로이드에서 스플래쉬 스크린 지원
    • 푸시알림과 광고 프로젝트 옵션
    • 프로젝트 매니저에서 자바 라이브러리 추가
    • Java2OP tool: 자바 안드로이드 클래스를 오브젝트 파스칼 인터페이스로 생성


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

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

    RAD Studio XE7의 TListView에서 당겨서 새로고침 구현 샘플

    2014.11.04 09:37

    RAD Studio XE7에서 TListView의 당겨서 새로고침 기능이 추가되었습니다.(이전버전에서는 코드로 직접 구현이 필요했습니다.)

    TListView에서 제공하는 기능은 목록을 당기면 UI 요소에서 새로고침 UI를 표시하고 이벤트를 발생하는 UI 요소에 대한 새로고침 기능입니다. 실제 데이터를 조회하는 기능은 이벤트 내에서 직접 구현해야 합니다.


    엠바카데로의 사리나 듀폰의 블로그에서 TListView의 당겨서 새로고침(OnPullRefresh) 이벤트에서 데이터 처리하는 기능에 대한 샘플을 제공합니다.


    아래와 같이 UI를 구성하고 BaaS(Backend as a Service: Cloud Service)에서 데이터를 조회하는 내용의 샘플입니다.


    자세한 내용은 하단의 링크를 통해 따라해 보시기 바랍니다.



    사용되는 구성요소

    User Interface:

    • TListView, aligned to the client
      • populated with data using LiveBindings Designer
    • TToolbar, aligned to the top
      • TLabel, parented to TToolbar, aligned to contents; TextSettings->HorzAlign: Center
    • TToolbar, aligned to the bottom
      • TLabel, parented to TToolbar, aligned to contents; TextSettings->HorzAlign: Center; TextSettings->FontColor: Dodgerblue;
    BaaS:
    • TKinveyProvider
      • AppKey, AppSecret and MasterSecret have been set; you can also use TApp42Provider and TParseProvider
    • TBackendQuery for querying existing data that lives in the cloud and was added via the BaaS web interface
      • connected to KinveyProvider; BackendService = Storage; BackendClassName = Recipes (this was defined inside my Kinvey account))
    • TRESTResponseDataSetAdapter
      • DataSet = FDMemTable1
      • ResponseJSON = BackendQuery1
      • Active = True
    • TFDMemTable


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

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

    1. 링크가 깨진것 같습니다. 아래 링크에서 내용을 확인할 수 있습니다.
      http://community.embarcadero.com/index.php/blogs/blogger/listall/sarina-dupont-embarcadero-com?start=10

    파이어몽키 커스텀 스타일 제작 따라하기

    2014.11.03 14:56

    파이어몽키에서는 스타일 기반으로 아주 유연하고 다양한 외관의 앱을 개발할 수 있습니다.


    오늘은 엠바카데로의 블로그에 소개된 파이어몽키 커스텀 스타일을 제작하는 방법을 소개합니다.

    총 9단계에 걸처 파이어몽키 스타일을 수정(제작)할 수 있습니다. 




    관련글



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

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

    1. Blog Icon
      궁금이

      저 궁금한게 있는데요 윈도에서 스타일 적용했을때 잔상이 남던데 어떻게 해결하시나요

    [XE7] 안드로이드 브릿지 파일을 생성할 수 있는 Java2OP.exe을 다운로드 하세요.

    2014.11.03 14:20

    RAD Studio XE7(델파이, C++빌더) 구입 하신 분들은 Java2OP 커맨드라인 유틸리티를 다운로드 할 수 있습니다.

    Java2OP(Java to Object Pascal) 커맨드라인 툴은 델파이 안드로이드 어플리케이션에서 자바 라이브러리를 사용할 수 있도록 자바 클래스 파일을 이용해 오브젝트 파스칼(델파이)용 브릿지 파일을 생성할 수 있는 도구입니다.

    이 툴을 이용하면 JAR 파일 또는 자바 클래스 파일을 연동할 수 있는 Object Pascal 브릿지 파일을 생성해 델파이에서 이용할 수 있습니다.


    자세한 사용법은 다음 글의 동영상으로 익힐 수 있습니다.


    참고





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

    험프리.김현수 파이어몽키 Delphi, Java2OP, RAD Studio XE7, XE7

    웹브라우저를 지원하지 않는 플랫폼(윈도우, OS X)에서 웹브라우저 지원하기

    2014.10.24 09:25

    RAD Studio와 AppMethod에서 멀티플랫폼으로 개발할 수 있지만, 아쉽게도 몇개의 컨트롤은 제한적인 플랫폼에서만 사용할 수 있습니다.

    웹브라우저가 그 중하나인데요. 일본의 엠바카데로 MVP 개발자인 Hosokawa Jun가 윈도우와 OS X에서 사용할 수 있도록 소스코드와 설명을 공개했습니다.


    일본어로 되어 있으므로 번역기를 통해 내용을 확인하시기 바랍니다.


    그리고 웹브라우저의 소스코드는 Github에 있습니다.

    TWebBrowser 뿐 아니라 다양한 소스코드가 공개되어 있으니 살펴보면 많은 도움이 될것입니다.


    참고



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

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

    FMX 리스트박스를 정렬하고 필터링하는 내용 설명

    2014.10.22 10:10



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

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

    내가 원하는 이름으로 모바일 앱의 이름 변경하기

    2014.10.21 11:30

    배포 전 프로젝트 옵션을 변경해 앱의 정보를 설정할 수 있습니다.

    이름을 변경하려하는 경우 아래 정보를 참고하세요.

    안드로이드

    Project > Option > Version Info > label



    iOS

    Project > Option > Version Info > CFBundleDisplayName





    참고



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

    험프리.김현수 파이어몽키 android, CFBundleDisplayName, Display, ios