자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi XE7델파이로 안드로이드쪽 개발을 하고 있습니다. 그런데~~~
2014.09.25 01:43
델파이로 안드로이드 쪽 USB통신을 만들고 있는데 샘플 소스를 구해서 응용한 결과 에러가 납니다. 그런데 에러나는 곳이 다른곳에서도 쓰이는 것인데 왜 정의가 안되어 있다고 나오는 것인지 알수 없어서 도움을 요청 합니다.
USES절에 Androidapi.JNI.JavaTypes을 정의 했는데도 아래 버튼3 부분 SharedActivityContext.getSystemService(TJContext.JavaClass.USB_SERVICE);에서 SharedActivityContext와 getSystemService가 정의가 안되어 있다고 에러가 뜸니다
그리고 그밑에 jstringtostring(s)도 정의가 안되어 있다고 하는데 아 찾지는 못하겠습니다.
참조하는 웹에 샘플은 다음과 같습니다. http://www.bverhue.nl/g2dev/?p=65 여기에 Androidapi.JNI.USB는 구현을 해놨습니다.
도음을 요청합니다.
unit test;
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.JNIBridge,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.USB, FMX.Layouts, FMX.Memo;
.
.
.
procedure TForm1.Button3Click(Sender: TObject);
var JavaObject : JObject;
DeviceList : JHashMap;
Device : JUSBDevice;
i : Jiterator;
s : JString;
begin
// Device discovery...
// Get pointer to UsbManager
JavaObject := SharedActivityContext.getSystemService(TJContext.JavaClass.USB_SERVICE);
FUsbManager := TJUSBManager.Wrap((JavaObject as ILocalObject).GetObjectID);
// Get a list of connected slave devices
DeviceList := FUsbManager.getDeviceList;
s := DeviceList.toString;
Memo1.Lines.Add(jstringtostring(s));
// Get pointer to G2 Device
FUsbDevice := nil;
i := DeviceList.values.iterator;
while i.hasNext do begin
Device := TJUSBDevice.Wrap((i.next as ILocalObject).GetObjectID);
if (Device.getVendorId = 4092) and (Device.getProductId = 2) then
FUsbDevice := Device;
Memo1.Lines.Add('VendorID ' + IntToStr(Device.getVendorId) + ', ProductID ' + IntToStr(Device.getProductId));
end;
if assigned(FUsbDevice) then
button1.Enabled := assigned(FUsbDevice);
end;
Delphi XE7델파이로 안드로이드쪽 개발을 하고 있습니다. 그런데~~~
2014.09.25 01:43
델파이로 안드로이드 쪽 USB통신을 만들고 있는데 샘플 소스를 구해서 응용한 결과 에러가 납니다. 그런데 에러나는 곳이 다른곳에서도 쓰이는 것인데 왜 정의가 안되어 있다고 나오는 것인지 알수 없어서 도움을 요청 합니다.
USES절에 Androidapi.JNI.JavaTypes을 정의 했는데도 아래 버튼3 부분 SharedActivityContext.getSystemService(TJContext.JavaClass.USB_SERVICE);에서 SharedActivityContext와 getSystemService가 정의가 안되어 있다고 에러가 뜸니다
그리고 그밑에 jstringtostring(s)도 정의가 안되어 있다고 하는데 아 찾지는 못하겠습니다.
참조하는 웹에 샘플은 다음과 같습니다. http://www.bverhue.nl/g2dev/?p=65 여기에 Androidapi.JNI.USB는 구현을 해놨습니다.
도음을 요청합니다.
unit test;
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.JNIBridge,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.USB, FMX.Layouts, FMX.Memo;
.
.
.
procedure TForm1.Button3Click(Sender: TObject);
var JavaObject : JObject;
DeviceList : JHashMap;
Device : JUSBDevice;
i : Jiterator;
s : JString;
begin
// Device discovery...
// Get pointer to UsbManager
JavaObject := SharedActivityContext.getSystemService(TJContext.JavaClass.USB_SERVICE);
FUsbManager := TJUSBManager.Wrap((JavaObject as ILocalObject).GetObjectID);
// Get a list of connected slave devices
DeviceList := FUsbManager.getDeviceList;
s := DeviceList.toString;
Memo1.Lines.Add(jstringtostring(s));
// Get pointer to G2 Device
FUsbDevice := nil;
i := DeviceList.values.iterator;
while i.hasNext do begin
Device := TJUSBDevice.Wrap((i.next as ILocalObject).GetObjectID);
if (Device.getVendorId = 4092) and (Device.getProductId = 2) then
FUsbDevice := Device;
Memo1.Lines.Add('VendorID ' + IntToStr(Device.getVendorId) + ', ProductID ' + IntToStr(Device.getProductId));
end;
if assigned(FUsbDevice) then
button1.Enabled := assigned(FUsbDevice);
end;
Androidapi.Helpers 를 추가히시면 됩니다.