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を作成する方法について、誰かが私にアドバイスしたり、正しい方向で指摘してくれれば、それは分かります。