无法阅读NFC的 - Android

时间:2012-08-06 16:46:10

标签: android nfc ndef

我正在尝试使用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>


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

坦克你的时间。

此致 丽塔

3 个答案:

答案 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()));