繁体   English   中英

阅读NFC时遇到问题-Android

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM