2017-10-09 21 views
1

からURIを読んだとき、私はNFC読み取り/書き込みを作成したデータの欠落部分:NFCタグ

READはデータを処理し、Webブラウザを起動するための責任がある:

ndef.connect() 
val ndefMessage = ndef.ndefMessage 
if (ndefMessage.records != null && ndefMessage.records.isNotEmpty()) { 
    message = String(it.records[0].payload) 
} 
ndef.close() 

WRITEは、NFCタグにURLを書き込みます:

ndef.connect() 
val mimeRecord = NdefRecord.createUri(url) 
ndef.writeNdefMessage(NdefMessage(mimeRecord)) 
ndef.close() 

いくつかの神秘的な理由で、私はURLを書くとき「http://www.google.com」、私の私のmessage変数を(それにタグを読んだ後、 URL)には「google.com」のみが含まれます。 URLの残りの部分(「http://www。」)が削除された理由はわかりません。何が起こっているのか教えていただけますか?私のミスはどこですか?

+0

を、あなたが持っているタグに変数 'url'を書いています値は 'http:// www.google.com'です。あなたがそれを読んだら、戻り値は' google.com'ですか?あなたは他のURLを試しましたか? URLが作成された場所を確認すると便利です。 – WoogieNoogie

+0

あなたが書いたように、現時点ではそれは大胆に動作します。はい、私は別のURLを試しました - 違いはありませんtho:CIは 'EditText'ウィジェットからURLを読み込み、それを私の' TagManager'に渡します – JakubW

+0

これは答えとして置くことはできません。短くて簡潔でなければならない。 'default 'URIのように、' http:// www'で始まる場合、Ndefライブラリが意図的にURLを短縮している可能性は非常に高いです。 – WoogieNoogie

答えて

1

あなたは、単純なテキスト(UTF-8でエンコードされた文字列)としてNDEFレコードのペイロードを解読しようとしている。

message = String(it.records[0].payload) 

はしかし、あなたは、NFCフォーラムのURIレコードとしてURLを書いた:

NdefRecord.createUri(url) 

したがって、NFCフォーラムURIレコードタイプ定義の仕様(NFCフォーラムのavaibale)に従ってURIレコードを解釈する必要があります。このようなURIレコードのペイロードは、1つの略語バイト(明確に定義された接頭辞の表でURI接頭辞を検索するために使用できる)とURI接尾辞(UTF-8エンコード)で構成されます。

あなたがいずれかのような何か使用してあなたのための魔法にアンドロイドを自分でレコードペイロードを解析したりしましょう可能性が

:明確にするために

uriString = it.records[0].toUri() 
関連する問題