开始使用Android和Linux之间的NFC P2P通信(libnfc)

时间:2017-12-01 16:51:58

标签: android linux nfc-p2p lib-nfc

最终,我需要在Android设备和使用libfc的NFC适配器的Linux主机之间实现加密协议。

我之前从未使用过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 );
    }
}

我的基本问题是底部方法中的注释:如何获取请求消息?

1 个答案:

答案 0 :(得分:0)

根本没有请求消息。 Android Beam(这是在Android上使用NFC点对点模式的唯一方式)基于SNEP(超过LLCP)。调用方法createNdefMessage()以构建设备上SNEP客户端提供的NDEF消息。将两个设备放在一起后(以及点击Beam UI后),Android会尝试在另一台设备上找到SNEP服务器并将NDEF消息推送到其收件箱。

所以唯一的#34;请求"在Android Beam中扮演角色的是您的设备用于发送消息的PUT请求。该过程由NFC发现启动,并且没有从另一方收到具体请求。