0

我正在尝试做一个简单的应用程序,它使用 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>


/ * ** * ** * ** * ** * * /

为你腾出时间。

真诚的,丽塔

4

3 回答 3

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();
        }
于 2012-08-08T07:55:44.630 回答
0

结果cardRecord.getPayload()为字节数组,包含二进制数据。此数据不能简单地转换为 URL,因为 URL 的一部分被压缩以节省存储空间。有效载荷的第一个字节编码 URL 的常见前缀(例如“http://www.”和“https://”),因此您需要单独解码。有关完整列表,请参阅NFC URI RTD 技术规范。您可以轻松地自己实现它,或者尝试使用https://github.com/grundid/nfctools中的 NDEF 解码类来为您完成。

于 2012-08-06T19:37:32.240 回答
0
            textView.setText(new String(ndefMessage.getRecords()[1].getPayload()));
于 2016-03-09T06:13:18.140 回答