2

Ndef タグに画像を書き込もうとしていますが、現在は書き込めますが、マーケット アプリケーションで読み込もうとすると、テキスト メッセージのように扱われます。ここに画像を書く私のコードがあります:

        Bitmap mBitmap = Bitmap.createScaledBitmap(mPhoto, 100, 100, true);
        ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
        mBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        NdefRecord picRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "image/png".getBytes(), null, byteArray);
        String informations = "name: "+name + "\ntitle: " + title + "\naddress: "+ address + "\ncity: "+ city + "\nphone: "+ phone + "\nmail: "+mail;
        NdefRecord textRecord = createTextRecord(informations);
        NdefMessage message = new NdefMessage(new NdefRecord[]{picRecord, textRecord});

私もこの方法で画像を書いてみました:

        NdefMessage msg = new NdefMessage(new NdefRecord[] {createMimeRecord("image/png", byteArray), textRecord});

メソッド createMimeRecord で:

        public NdefRecord createMimeRecord(String mimeType, byte[]payload) {
        byte[] mimeBytes = mimeType.getBytes(Charset.forName("USASCII"));
        NdefRecord mimeRecord = new
        NdefRecord(NdefRecord.TNF_MIME_MEDIA,
        mimeBytes, new byte[0], payload);
        return mimeRecord;
        }

「TagInfo」などのアプリケーションで画像を読み取ろうとしたときに得られる結果は次のとおりです。ここに画像の説明を入力

テキストメッセージはよく書かれており、普通に読むことができます。「createMime(String mime type, byte[] data)」を使用しようとしましたが、このメソッドは「未定義」のようです。ビットマップ画像を Jpeg 形式で圧縮しようとしましたが、同じ結果が得られました。 NdefMessages 経由で画像を送信する例を見つけましたが、見つかりませんでした。

4

2 に答える 2

1

最後に、NFCタグで名刺の書き込みと読み取りを行うアプリケーションを検索しましたが、何も見つかりませんでした。独自の名刺を作成し、自分で読むことにしました。Ndef Message を使用してカードを書き込むために使用したコードは次のとおりです。

        Bitmap mBitmap = mPhoto;
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        mBitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream);
        byte[] byteArray = stream.toByteArray();
        NdefRecord picRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,  "image/jpeg".getBytes(), null, byteArray);
        String informations = "name: "+name + "\ntitle: " + title + "\naddress: "+ address + "\ncity: "+ city + "\nphone: "+ phone + "\nmail: "+mail + "\n";
        NdefRecord textRecord = createTextRecord(informations);
        NdefMessage message = new NdefMessage(new NdefRecord[]{picRecord, textRecord});

読み取り部分のコードは次のとおりです。

        NdefRecord picRecord = records[0];
        NdefRecord infoRecord = records[1];
        byte[] picload = picRecord.getPayload();
        byte[] infoload = infoRecord.getPayload();
        Bitmap photo = BitmapFactory.decodeByteArray(picload, 0, picload.length);
        String textEncoding = ((infoload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
        int languageCodeLength = infoload[0] & 0077;
        String text = null;
        try{
            String languageCode = new String(infoload, 1, languageCodeLength, "US-ASCII");
            text = new String(infoload, languageCodeLength + 1,infoload.length - languageCodeLength - 1, textEncoding);
        }catch(Exception e){
            Alert("String decoding", e.toString());
            return;
        }

JPEG 暗号化は、品質をあまり落とさずに画像を圧縮するのに大いに役立ちます。タグでの転送には 2 ~ 3 秒かかりますが、解決策はうまくいきます。

于 2013-04-15T07:38:25.310 に答える
0

ユース ケースが名刺を NFC タグに保存する場合は、画像データではなく、画像へのリンクを保存することをお勧めします。そうしないと、名刺を通常のタグ (タグの通常のサイズは 1K または 4K) に保存するのに苦労し、データの転送に時間がかかりすぎます。vCard の仕様によれば、バイナリ イメージ データを base64 形式で保存することと、URL リンク (これを強くお勧めします) の両方を行うことができます。

vCard の形式の詳細については、次を参照してください。

http://en.wikipedia.org/wiki/VCard

または詳細はこちら:

https://www.rfc-editor.org/rfc/rfc2426#section-3.1.4

于 2013-04-11T13:45:26.520 に答える