我正在尝试使用URL读取标签NFC的简单应用程序,并将URL写入TextView。 我试图运行它但没有工作。有人可以帮我吗? 代码如下,AndroidManifest也是如此! 我希望你能帮助我。
/ * **** 主要类 * ** < em> * *** /
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 * ** * * /
<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>
/ * ** * ** * ** * * * * * /
坦克你的时间。
此致 丽塔
答案 0 :(得分:1)
获得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();
}
答案 1 :(得分:0)
cardRecord.getPayload()
产生一个包含二进制数据的字节数组。此数据不能简单地转换为URL,因为URL的一部分被压缩以节省存储空间。有效负载的第一个字节编码URL的公共前缀(例如“http:// www。”和“https://”),因此您需要单独解码。有关完整列表,请参阅NFC URI RTD Technical Specification。您可以自己轻松实现它,或尝试使用https://github.com/grundid/nfctools中的NDEF解码类来为您完成。
答案 2 :(得分:0)
textView.setText(new String(ndefMessage.getRecords()[1].getPayload()));