0

私は 2 つの Android アプリケーションを開発しました。1つ目はNFCタグへの書き込み、2つ目は書いた内容の読み取り。

これは、最初のアプリケーション (WriteNFC) で行ったことです。

private NdefRecord createRecord1(String data)
{ 
byte[] payload = data.getBytes(Charset.forName("UTF-8"));
byte[] empty = new byte[] {};
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload);
}
private NdefRecord createRecord2(String data)
{ 
byte[] payload = data.getBytes(Charset.forName("UTF-8"));
byte[] empty = new byte[] {};
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty);
}

そして2番目のアプリケーション(ReadNFC)で

NdefRecord cardRecord = msg.getRecords()[1];//Extract the second Record
String url_data = new String(cardRecord.getType());//Read data type

自分のアプリケーション (ReadNFC) で読み取ると、もちろん、「レコード タイプ」で保存した 2 番目のレコードのペイロードのみが画面に表示されました。しかし、サードパーティのアプリケーション、特にネイティブにインストールされた (「タグ」) (写真に示されている) を使用すると、最初のレコードが正しく表示され、2 番目のレコードは空のフィールドになります。このフィールドを非表示にするにはどうすればよいですか。それ以外の場合、他のサードパーティ アプリケーションが 2 番目のレコードを読み取らないようにするにはどうすればよいですか?

ここに画像の説明を入力

4

3 に答える 3

3

あなたは単にそれを行うことはできません. Android は完全な NDEF メッセージ (つまり、すべてのレコード) を読み取り、それをインテントでアプリに渡します。

于 2012-12-11T11:16:30.430 に答える
0

このサードパーティのアプリは私にとって面倒だったので、foregroundDispatchを使用してタグの内容を手動で読み取る必要がありました。そこでは、好きなものを読んだり、読んだりしない自由があります。このスニペットはOnResume()からのものです。`

mNfcAdapter.enableForegroundDispatch(this, pendingIntent,
                intentFiltersArray, techListsArray);

            Toast.makeText(getApplicationContext(), "TAG disscovered",
                    Toast.LENGTH_LONG).show();
            Parcelable[] rawMsgs = getIntent()
            .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

            if (rawMsgs != null) {
                NdefMessage[] msgs = new NdefMessage[rawMsgs.length];


                for (int i = 0; i < rawMsgs.length; i++) {

                    msgs[i] = (NdefMessage) rawMsgs[i];
                    setText=new String(msgs[i].getRecords()[0].getPayload());
                }
                mInfoText.setText(setText);
            }

        }`

ここで、最初のレコードのペイロードを取得します。

于 2013-03-19T09:19:45.953 に答える
0

Upps、これが起こっているのも不思議ではありません。あなたのコードを見てください。初め

return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload);

それから

return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty);

したがって、サードパーティのアプリは実際には正しいデータを表示しています。レコードの作成にバグがあります。

Android のネイティブ NDEF サポートはやや粗雑 (バイト配列ベース) であるため、興味深いと思われるレコードの作成に役立つライブラリを作成しました。上記の問題は簡単に解決できるかもしれませんが、他にももっと複雑なレコードの種類がたくさんあるので、何か助けになるかもしれません ;-)

編集:したがって、これが望ましい結果である場合は、不明なレコードを作成し、「秘密の」データをペイロードとして配置します。これは、サードパーティのアプリがそのデータを表示する良い方法ではありませんが、絶対 URI の IDレコードは、NDEF 読み取りアプリ (のようなものですか?)で確実に表示できます。

于 2012-12-11T13:01:23.807 に答える