我正在通过官方的Android开发人员教程学习Android和NFC编程。我想要的是编写一个由NFC标签触发的应用程序。当应用程序启动时,我希望它显示包含扫描标签的UID的Toast消息。我的简单代码是:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
Toast.makeText(getApplicationContext(), "UID: " + bin2hex(tag.getId()), Toast.LENGTH_SHORT).show();
}
// Parsing binary to string
static String bin2hex(byte[] data) {
return String.format("%0" + (data.length * 2) + "X", new BigInteger(1,data));
}
我还更新清单文件以启用NFC,如下所示:
<uses-permission android:name="android.permission.NFC"/>
....
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<application
<activity
android:name="com.testapp.testnfc.MainActivity"
android:label="@string/app_name" >
.....
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
</application>
然后我使用Play商店中的“NFC Task Launcher”应用程序写入我的标签,以便标签触发我的新应用程序。创建标签后,点击它将成功启动我的新应用程序,但该应用程序无法显示UID的吐司,它将崩溃说“不幸的测试NFC已停止”。我错过了什么导致这次崩溃?
答案 0 :(得分:1)
尝试如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
Toast.makeText(this,bin2hex(tag.getId()),Toast.LENGTH_LONG).show();
}
}