[英]Trouble reading NFC's - Android
我正在尝试做一个简单的应用程序,该应用程序读取带有URL的标签NFC并将URL写入TextView中。 我试图运行它,但是没有用。 有人可以帮我吗? 代码如下,AndroidManifest也是如此! 我希望你能帮助我。
/ * **** 主舱 * ** * *** /
public class MainActivity extends Activity {
private TextView mCardView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ImageView that we'll use to display cards
mCardView = (TextView) findViewById(R.id.result);
Parcelable[] rawMsgs = getIntent().getParcelableArrayExtra(
NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msg = (NdefMessage) rawMsgs[0];
NdefRecord cardRecord = msg.getRecords()[0];
String val = new String(cardRecord.getPayload());
displayCard(val);
}
private void displayCard(String val) {
mCardView.setText(val);
}
}
/ * ** * ** * ** * ** * * /
/ * *** Android清单 * ** * * /
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.readnfc"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" android:debuggable="true">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<!-- Handle a collectable card NDEF record -->
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="developer.android.com"
android:pathPrefix="/index.html"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<data android:mimeType="text/plain" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
/ * ** * ** * ** * ** * * /
浪费你的时间。
真诚的丽塔
获得Parcelable数组后,像这样迭代并尝试读取,这可能会解决您的问题。
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
messages = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
messages[i] = (NdefMessage) rawMsgs[i];
}
}
if(messages[0] != null) {
String result="";
byte[] payload = messages[0].getRecords()[0].getPayload();
for (int b = 1; b<payload.length; b++) {
result += (char) payload[b];
}
Toast.makeText(getApplicationContext(), "Tag Contains " + result, Toast.LENGTH_SHORT).show();
}
cardRecord.getPayload()
一个字节数组,其中包含二进制数据。 此数据不能简单地转换为URL,因为URL的一部分被压缩以节省存储空间。 有效负载的第一个字节编码URL的公共前缀(例如“ http:// www。”和“ https://”),因此您需要分别对其进行解码。 有关完整列表,请参阅NFC URI RTD技术规范 。 您可以自己轻松实现它,也可以尝试使用https://github.com/grundid/nfctools中的NDEF解码类为您实现。
textView.setText(new String(ndefMessage.getRecords()[1].getPayload()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.