1

最終的には、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 );
    }
}

私の非常に基本的な質問は、一番下のメソッドのコメントです: リクエストメッセージを取得するにはどうすればよいですか?

4

1 に答える 1

0

リクエストメッセージはありません。Android ビーム (Android で NFC ピアツーピア モードを使用する唯一の方法) は、SNEP (over LLCP) に基づいています。このメソッドcreateNdefMessage()は、デバイス上の SNEP クライアントによって提供される NDEF メッセージを構築するために呼び出されます。2 つのデバイスを接続すると (および Beam UI をタップした後)、Android はもう一方のデバイスで SNEP サーバーを見つけようとし、NDEF メッセージをその受信トレイにプッシュします。

したがって、Android Beam で役割を果たす唯一の「リクエスト」は、デバイスがメッセージを送信するために使用する PUT リクエストです。プロセスは NFC 検出によって開始され、相手側から受信した特定の要求はありません。

于 2017-12-04T11:15:08.493 に答える