2016-04-05 18 views
0

Androidデバイス上のスキャナを制御するために、Delphi SeattleでHoneywell SDKを使用しようとしています。DelphiでサードパーティのAndroid APIを使用する

ハネウェルは私にDataCollection.jarというSDKジャーを提供しました。 Java2OPユーティリティを使用してJNIブリッジを作成しましたが、問題があります。正直言って、私はこれについて初心者であり、どこを見ているのか、それをどう実装するのかは分かりません。私も同様の例を探しました。

私はバーコードリーダー機能にアクセスするためのタイプTJAidmanagerのオブジェクトを作成する必要があります知っている、次のように定義されます今

import com.honeywell.aidc.*; 
public class MainActivity extends Activity { 
private AidcManager manager; 
private BarcodeReader reader; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

// create the AidcManager providing a Context and an 
// CreatedCallback implementation. 
AidcManager.create(this, new AidcManager.CreatedCallback() { 

@Override 
public void onCreated(AidcManager aidcManager) { 
manager = aidcManager; 
reader = manager.createBarcodeReader(); 
} 
} 
} 

@Override 
public void onDestroy() { 
super.onDestroy(); 
// make sure that AidcManager isn't null 
if (reader != null) { 
// close BarcodeReader to clean up resources. 
// once closed, the object can no longer be used. 
reader.close(); 
} 
if (manager != null) { 
// close AidcManager to disconnect from the scanner service. 
// once closed, the object can no longer be used. 
manager.close(); 
} 
} 
} 

:Javaサンプル・コードは次のようになります

JAidcManagerClass = interface(JObjectClass) 
['{EE70EF80-4CA8-4FE0-B912-6453CA0336CD}'] 
{class} function _GetBARCODE_DEVICE_CONNECTED: Integer; cdecl; 
{class} function _GetBARCODE_DEVICE_DISCONNECTED: Integer; cdecl; 
{class} procedure addBarcodeDeviceListener(P1:  JAidcManager_BarcodeDeviceListener); cdecl; 
{class} procedure close; cdecl; 
{class} procedure create(P1: JContext; P2: JAidcManager_CreatedCallback); cdecl; 
{class} function createBarcodeReader: JBarcodeReader; cdecl; overload; 
{class} function createBarcodeReader(P1: JString): JBarcodeReader; cdecl;  overload; 
{class} function listBarcodeDevices: JList; cdecl; 
{class} function listConnectedBarcodeDevices: JList; cdecl; 
{class} procedure removeBarcodeDeviceListener(P1: JAidcManager_BarcodeDeviceListener); cdecl; 
{class} property BARCODE_DEVICE_CONNECTED: Integer read  _GetBARCODE_DEVICE_CONNECTED; 
{class} property BARCODE_DEVICE_DISCONNECTED: Integer read _GetBARCODE_DEVICE_DISCONNECTED; 
end; 

[JavaSignature('com/honeywell/aidc/AidcManager')] 
JAidcManager = interface(JObject) 
['{98A668C5-9204-4F0C-98B0-A8E1F1124738}'] 
end; 
TJAidcManager = class(TJavaGenericImport<JAidcManagerClass, JAidcManager>) end; 

デルファイでこれを試してみると、私はこれを試しましたが、セグメンテーションフォルトが発生します:

var cb : JAidcManager_CreatedCallback; 
begin 
     TJAidcManager.JavaClass.create(SharedActivity,TJAidcManager_CreatedCallback.Wrap((cb as ILocalObject).getobjectID)); 

JAidcManager_CreatedCallbackは次のように定義されています

JAidcManager_CreatedCallbackClass = interface(IJavaClass) 
    ['{E27EF6BB-C642-42B6-98CA-6C270A1AD5D1}'] 
    {class} procedure onCreated(P1: JAidcManager); cdecl;//Deprecated 
    end; 

    [JavaSignature('com/honeywell/aidc/AidcManager$CreatedCallback')] 
    JAidcManager_CreatedCallback = interface(IJavaInstance) 
    ['{E2713D70-1CE6-43AA-9181-7054BD787F1B}'] 
    end; 
    TJAidcManager_CreatedCallback = class(TJavaGenericImport<JAidcManager_CreatedCallbackClass, JAidcManager_CreatedCallback>) end; 

私はタイプTJAidcManagerの変数のonCreatedイベントを実装する必要がありますが、私はすべて一緒にこれらをリンクする方法を確認していないと仮定します。

は、私は、この試みた:

var cb : JObject; 
begin 
    cb := TjObject.Create; 
    TJAidcManager.JavaClass.create(SharedActivityContext,TJAidcManager_CreatedCallback.Wrap((cb as ILocalObject).getobjectID)); 

私も実装セクションでJNIBridgeユニットにこれを追加しました:

procedure onCreated(P1: JAidcManager); cdecl;//Deprecated 
begin 
    Form2.manager := P1; 
end; 

これを実行している、私は「java.lang.SecurityExceptionを取得します: Intent {acct = com.honeywell.decode.DecodeService cmp = com.intermec.datacollectionservice/.DataCollectionService} "エラーにバインドすることはできません。パーミッションに「Bind Remoteviews」を追加しようとしましたが、それは役に立ちませんでした。

デルファイでAidcManagerを作成する方法について、誰かが私にアドバイスしたり、正しい方向で指摘してくれれば、それは分かります。

答えて

0

この問題は解決されました。私はcom.embarcadero.firemonkey.FMXNativeActivityを拡張する必要がありました。

詳細については、こちらをご覧ください。Embaradero Forum with link to Source

関連する問題