最終的には、libfc を使用して NFC アダプターを備えた Linux ホストと Android デバイスの間に暗号化プロトコルを実装する必要があります。
AndroidでNFCを使用したことはありません。現時点での私の考えは、パッシブ バリアントのピアツーピア モードで NFC を使用することです。たとえば、Linux ホストのスマートカード リーダーがイニシエータの役割を果たし、スマートフォンがターゲットである間に HF フィールドを提供します。
私が理解している限り、コールバックcreateNdefMessage
を使用して NFC 要求に反応し、応答メッセージを送り返すことができます。ただし、Android プログラムで要求メッセージを取得する方法がわかりません。
現時点では、おもちゃの例として、次のことを達成しようとしています。LinuxホストはNFC経由で乱数を送信し、Androidデバイスは乱数を描画して合計で応答します。
私は持っている
package edu.kit.iti.crypto.nfctest1;
import android.app.Activity;
import android.content.Intent;
import android.nfc.*;
import android.os.Bundle;
import android.provider.Settings;
import java.nio.ByteBuffer;
public class MainActivity extends Activity implements NfcAdapter.CreateNdefMessageCallback {
protected NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
nfcAdapter = NfcAdapter.getDefaultAdapter( getApplicationContext() );
nfcAdapter.setNdefPushMessageCallback( this, this );
}
protected void onResume() {
super.onResume();
if( !nfcAdapter.isEnabled() ) {
startActivity( new Intent( Settings.ACTION_NFC_SETTINGS) );
} else if( !nfcAdapter.isNdefPushEnabled() ) {
startActivity( new Intent( Settings.ACTION_NFCSHARING_SETTINGS) );
}
}
public NdefMessage createNdefMessage( NfcEvent event ) {
int randomNumber = 42;
// How to obtain the request message here?
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.putInt( randomNumber );
NdefRecord replyRecord = NdefRecord.createExternal( "edu.kit.iti.crypto.nfctest1", "app-randomness", buffer.array() );
return new NdefMessage( replyRecord );
}
}
私の非常に基本的な質問は、一番下のメソッドのコメントです: リクエストメッセージを取得するにはどうすればよいですか?