티스토리 뷰
FireMonkey Android - Open Dialog (Java Jar 라이브러리 사용)
파란크리스마스 2014. 11. 14. 23:12출처 : FMXExpress/android-object-pascal-wrapper
Android JNI Bridge and Custom Classes.dex
Java2OP.exe, the Native Bridge File Generator for Android
파이어몽키에서 안드로이드 외부 라이브러리(jar 파일) 이용(Import jar)
델파이 파이어몽키 안드로이드 앱 내에 스플래시 스크린추가
Creating a splash screen for Delphi XE6 Android apps
Delphi XE6のAndroidアプリケ?ションで、Intentを使ってアクティビティを開始して?り値を取得するサンプル
android-file-dialog
안드로이드 TOpenDialog 구현
FireMonkey의 Android에서 TOpenDialog가 동작하지 않아 android-file-dialog를 이용해서 TOpenDialog처럼 파일를 선택 할 수 있도록 구현 해보았습니다.
android-file-dialog 파일을 받아서 컴파일 해서 jar로 묶고 FireMonkey 프로젝트를 만들고 jar를 추가했습니다.
XE7부터는 classes.dex로 만들지 않고, jar 형태의 라이브러리를 바로 추가 할수 있고, java2op 유틸리티로 브릿지 파일을 생성 할 수 있어서 편하게 안드로이드용 라이브러리 추가가 가능합니다.
안드로이드 브릿지 파일 생성
유틸리티 java2op로 안드로이드 브릿지 파일(Androidapi.JNI.Interfaces.pas)를 생성 합니다.
java2op -jar lib_fileexplorer.jar
라이브러리 jar 추가
AndroidManifest.template.xml 파일 수정
<!-- bluexmas --> <activity android:name="com.lamerman.FileDialog" android:configChanges="orientation|keyboard" />
리소스 추가
메뉴 > Project > Deployment 선택
Activity 화면 전환
Intent := TJIntent.JavaClass.init; Intent.setClassName(SharedActivityContext, StringToJString('com.lamerman.FileDialog')); SharedActivity.startActivityForResult(Intent, 0);
결과 메시지 받기
HandleActivityMessage 함수로 FileDialog Activity의 결과를 받아 오도록 등록
FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage (TMessageResultNotification, HandleActivityMessage);
결과 처리
filename := JStringToString(Data.getStringExtra(StringToJString('RESULT_PATH'))); Edit1.Text := filename;
델파이 전체소스
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, Androidapi.JNI.Interfaces, System.Messaging, FMX.Platform.Android, Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private const ScanRequestCode = 0; var FMessageSubscriptionID: Integer; procedure HandleActivityMessage(const Sender: TObject; const M: TMessage); function OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage); begin if M is TMessageResultNotification then OnActivityResult(TMessageResultNotification(M).RequestCode, TMessageResultNotification(M).ResultCode, TMessageResultNotification(M).Value); end; function TForm1.OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean; var filename : string; begin Result := False; TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, FMessageSubscriptionID); FMessageSubscriptionID := 0; // For more info see https://github.com/zxing/zxing/wiki/Scanning-Via-Intent if RequestCode = ScanRequestCode then begin if ResultCode = TJActivity.JavaClass.RESULT_OK then begin if Assigned(Data) then begin filename := JStringToString(Data.getStringExtra(StringToJString('RESULT_PATH'))); Edit1.Text := filename; //Toast(Format('Found %s format barcode:'#10'%s', [ScanFormat, ScanContent]), LongToast); end; end else if ResultCode = TJActivity.JavaClass.RESULT_CANCELED then begin //Toast('You cancelled the scan', ShortToast); end; Result := True; end; end; procedure TForm1.Button1Click(Sender: TObject); var Intent: JIntent; // JFileDialog; begin FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage (TMessageResultNotification, HandleActivityMessage); Intent := TJIntent.JavaClass.init; Intent.setClassName(SharedActivityContext, StringToJString('com.lamerman.FileDialog')); SharedActivity.startActivityForResult(Intent, 0); end; end.
실행
전체소스
- Total
- Today
- Yesterday
- oracle
- NDK
- flex
- 송주경
- ffmpeg
- ble
- ubuntu
- 튜닝쇼 2008
- sas2009
- MySQL
- Delphi
- 일본여행
- 지스타2007
- KOBA
- BPI-M4
- android
- JavaScript
- Linux
- 동경
- SAS
- 서울오토살롱
- Spring MVC
- Java
- 전예희
- Mac
- Spring
- Delphi Tip
- Xcode
- 레이싱모델 익스트림 포토 페스티벌
- koba2010
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |