最终,我需要在 Android 设备和具有使用 libfc 的 NFC 适配器的 Linux 主机之间实现加密协议。
我以前从未在 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 );
}
}
我非常基本的问题是底部方法中的注释:如何获取请求消息?