Связь с Mifare DESFire в Delphi

Я хочу написать приложение в Delphi, которое может общаться с телефонами Android и картами DESFire. Я знаю, я должен отправить несколько байтов на карту, и карта отвечает мне. Я читал статью об этом:

https://ridrix.wordpress.com/2009/09/19/mifare-desfire-communication-example/

Я понятия не имею, как я могу писать и читать байты с карты? Я написал простое приложение по Даниэлю Магину:

http://www.danielmagin.de/blog/index.php/2014/09/nfc-android-application-with-delphi-xe6-and-xe7/

Эта программа может только считывать UID с карты.

function TNfc.ReadNFCUID: string;
var
  Intent: JIntent;
  jIntentName: JString;
  IntentName: string;
  tagId: Androidapi.JNIBridge.TJavaArray<Byte>;
  tagFromIntent: JParcelable;
  id: string;
  i: Integer;

begin
  id := '';
  Intent := SharedActivity.getIntent;

  if Intent <> nil then
  begin
    jIntentName := Intent.getAction;
    IntentName := JStringToString(jIntentName);

    tagId := Intent.getByteArrayExtra(TJNFCAdapter.JavaClass.EXTRA_ID);

    tagFromIntent := Intent.getParcelableExtra
      (TJNFCAdapter.JavaClass.EXTRA_TAG);
    if (tagId <> nil) and (tagFromIntent <> nil) then
    begin
      for i := 0 to tagId.Length - 1 do
        id := id + IntToHex(tagId.Items[i], 2);
    end;
  end;

  Result := id;

end;

person Jirka Grigar    schedule 05.11.2014    source источник
comment
Пожалуйста, добавьте основную часть кода, который вы написали, и добавьте недостающие теги, например. делфи-xe7   -  person bummi    schedule 06.11.2014


Ответы (1)


Нахожу решение своего вопроса:

..
var
    isoNFC : JIsoDep;
    tag : JTag;
    aRawData : TJavaByteArray;
    aResponse : TJavaByteArray;

begin
  aRawData := TJavaByteArray.Create(1);

  tag := TJTag.Wrap((CurrentNFCTag as ILocalObject).GetObjectID);
  isoNFC := TJIsoDep.JavaClass.get(tag);
  isoNFC.connect();

  aRawData.Items[0] := TCmd.GetApplicationIDs;
  aResponse := isoNFC.transceive(aRawData);
..
person Jirka Grigar    schedule 28.02.2015