我正在尝试以下列方式编写带坐标(纬度和经度)的NFC标签:
这是onCreate()
:
btnWriteMap.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String latitude = lat.getText().toString();
String longitude = lon.getText().toString();
urlAddress = "geo:"+latitude+","+longitude;
TextView messageText = (TextView)findViewById(R.id.txtMessage);
messageText.setText("Touch NFC Tag to share GEO location\n"+
"Latitude: "+latitude+"\nLongitude: "+longitude);
}
});
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
mFilters = new IntentFilter[] {
ndef,
};
mTechLists = new String[][] { new String[] { Ndef.class.getName() },
new String[] { NdefFormatable.class.getName() }};
onNewIntent()
方法:
@Override
public void onNewIntent(Intent intent) {
Log.i("Foreground dispatch", "Discovered tag with intent: " + intent);
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String externalType = "nfclab.com:geoService";
NdefRecord extRecord = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, externalType.getBytes(), new byte[0], urlAddress.getBytes());
NdefMessage newMessage = new NdefMessage(new NdefRecord[] { extRecord});
writeNdefMessageToTag(newMessage, tag);
}
代码是一本书的样本。我已经测试过,标签确实用geo:lat,lon编写,当然还有我在EditTexts中的坐标。
读取标签时出现问题。它将只显示(在默认的Android Tags应用程序中)以下消息:
vnd.android.nfc // EXT / nfclab.com:geoService
我想要的是标签应用程序识别这些是Google地图坐标并使用坐标启动地图。 externalType字符串应包含什么? 我需要在清单中使用Intent过滤器吗?
答案 0 :(得分:1)
“标签”应用会显示无法识别的NFC论坛外部类型public IEnumerable<string> GetDatasourceValue(Item targetItem)
{
List<string> uniqueDatasourceValues = new List<string>();
Sitecore.Layouts.RenderingReference[] renderings = GetListOfSublayouts(targetItem.ID.ToString(), targetItem);
foreach (var rendering in renderings)
{
if (!uniqueDatasourceValues.Contains(rendering.Settings.DataSource))
uniqueDatasourceValues.Add(rendering.Settings.DataSource);
}
return uniqueDatasourceValues;
}
}
(请注意,只有小写字母应用于外部类型名称,请参阅my answer here),因为您将该记录类型存储在标签。该类型是由nfclab.com创建的自定义类型,绝不是标准化的。因此,Tags应用程序不知道它应该对该记录做什么。
在NFC标签上存储地理坐标的标准方法是geo:URI方案。因此,您通常会创建一个包含geo:URI:
的URI记录nfclab.com:geoService
Tags应用程序将处理此类URI,并允许您在为geo:scheme(例如Google Maps)注册的任何应用程序中打开geo:URI。