最终,我需要在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 );
}
}
我的基本问题是底部方法中的注释:如何获取请求消息?
答案 0 :(得分:0)
根本没有请求消息。 Android Beam(这是在Android上使用NFC点对点模式的唯一方式)基于SNEP(超过LLCP)。调用方法createNdefMessage()
以构建设备上SNEP客户端提供的NDEF消息。将两个设备放在一起后(以及点击Beam UI后),Android会尝试在另一台设备上找到SNEP服务器并将NDEF消息推送到其收件箱。
所以唯一的#34;请求"在Android Beam中扮演角色的是您的设备用于发送消息的PUT请求。该过程由NFC发现启动,并且没有从另一方收到具体请求。