NFCプレミアム
26949 ワード
高度NFC
このドキュメントでは、さまざまなラベル技術、NFCラベル書き込み、フロントリリースなどの高度なNFCトピックについて説明します.これにより、他のアプリケーションフィルタが同じ場合でも、アプリケーションがフロントでIntentを処理できるようになります.
Tagテクニカルサポート
NFC TagとAndroidの電力供給装置を有効にすると、Tagを使用してデータを読み書きする主なフォーマットはNDEFであり、デバイスがNDEFデータのTagをスキャンすると、Androidは解析をサポートするメッセージを提供し、可能な場合にはNdefMessageに送信するが、場合によっては、NDEFデータが含まれていないTagをスキャンしたり、NDEFデータがMIMEタイプやURIにマッピングできない場合.その場合、Tagと直接コミュニケーションを取り、自分のプロトコル(元のバイトで)で読み書きし、Androidはandroidを使う必要があります.nfc.techパッケージは、表1に示すように、それらの状況に対して汎用的なサポートを提供する.getTechList()メソッドを使用して、技術サポートTagを決定し、androidを使用することができます.nfc.techが提供するクラスのうちの1つは、対応するTagTechnologyオブジェクトを作成する.
表1.サポートするTagテクノロジー
クラス#クラス#
説明
このインタフェースは、次のすべてのtag technologyクラスで実装する必要があります.
NFC-A(ISO 14443-3 A)にアクセスする属性とI/O操作を提供する
NFC-B(ISO 14443-3 B)にアクセスする属性とI/O操作を提供する
NFC-F(JIS 6319-4)にアクセスする属性とI/O操作を提供する
NFC-V(ISO 15693)にアクセスする属性とI/O操作を提供する
ISO-DPP(ISO 14443-4)にアクセスする属性とI/O操作を提供する
NDEFとしてフォーマットされたtagのデータへのアクセスとその他の操作を提供する
NDEF形式にフォーマットできるtagにフォーマットされた操作を提供する
次のTagテクノロジーはAndroidの給電機器にサポートされることを要求しません.
表2.オプションでサポートされるTagテクノロジー
クラス#クラス#
説明
AndroidデバイスがMIFAREをサポートしている場合は、MIFARE ClassicターゲットのプロパティとI/O操作を提供します.
AndroidデバイスがMIFAREをサポートしている場合は、MIFARE UltralightターゲットのプロパティとI/O操作を提供します.
TagテクニカルワークとACTION_TECH_DISCOVERED Intent
デバイスがNDEFデータのあるTagをスキャンするが、MIMEまたはURIにマッピングできない場合、TagパブリケーションシステムはActivityとACTION_を起動しようとする.TECH_DISCOVERED Intent.非NDEFがスキャンされるとACTION_TECH_DISCOVERDのTagも使用可能である.Tagパブリケーションシステムが解析できない場合は、ラベルのデータを直接スキャンできます.基本的な手順とラベル技術は次のとおりです.
処理したいTagテクノロジーをフィルタするACTION_TECH_DISCOVERED intent. 詳細については、NFCのフィルタリングを参照してください.一般的に言えば.NDEFメッセージがMIMEタイプまたはURIにマッピングできない場合、TagパブリケーションシステムはACTION_を起動しようとする.TECH_DISCOVERD intent,そうでないとスキャンするTagにNDEFデータが含まれない.詳細については、Tagリリースシステムを参照してください.
アプリケーションがIntentを受信すると、図からTagオブジェクトを取得します:
Tagsの読み取りと書き込み
NFCタグの読み取りおよび書き込みは、Intentからタグを取得するタグへの接続を作成することに関する.自分のプロトコルを定義してTagにデータを読み書きしなければなりませんそして、Tagを直接使用するとNDEFデータを読み書きできることを覚えておいてください.どのように物を構築したいのか、それは実現できます.MIFARE Ultralight tagの使用方法を以下の例で示す.
フロントエンドパブリケーションシステムの使用
フロントエンドパブリケーションシステムは、activityが1つのintentをブロックすることを許可し、他の処理によって同じintentのactivitiesを要求する.このシステムを使用することは、Androidシステムが適切なintentsをあなたに送信できるアプリケーションのためにいくつかのデータ構造を構築することに関する.フロントエンドパブリケーションシステムを有効にするには、次の手順に従います.
あなたのactivityの
Intent filtersで処理したいIntentを宣言し、tagが検出されたときにフロントパブリケーションシステムをチェックし、フロントActivityがIntent filterの要求に合致する場合、フロントのActivityはこのIntentを処理します.該当しない場合、フロントパブリケーションシステムはIntentをIntentパブリケーションシステムに転送します.nullのIntent filtersを指定すると、任意のtagが検出されるとTAG_が受信されます.DISCOVERED intent.次のコード断片はすべてのNDEFを処理します.DISCOVERDのMIMEタイプ.そのため、あなたが望んでいるIntentだけを処理すべきであることに注意してください.
プログラムが処理するTag technologiesのリストを設定し、Objectを呼び出します.class.getName()メソッドは、処理をサポートしたいtechnologyクラスを取得します.
次の方法を上書きして、フロントパブリケーションシステムをオンまたはオフにします.たとえばonPause()とonResume()メソッドです.プライマリスレッドでenableForegroundDispatch(Activity, PendingIntent, IntentFilter[], String[][])を呼び出し、Activityをフロントに呼び出す必要があります(onResume()でこの点を保証するために呼び出すことができます).得られたNFC tagデータを処理するためにonNewIntentコールバックも上書きします.
API Demosから完全な例示的なデモForegroundDispatch例を取得する
このドキュメントでは、さまざまなラベル技術、NFCラベル書き込み、フロントリリースなどの高度なNFCトピックについて説明します.これにより、他のアプリケーションフィルタが同じ場合でも、アプリケーションがフロントでIntentを処理できるようになります.
Tagテクニカルサポート
NFC TagとAndroidの電力供給装置を有効にすると、Tagを使用してデータを読み書きする主なフォーマットはNDEFであり、デバイスがNDEFデータのTagをスキャンすると、Androidは解析をサポートするメッセージを提供し、可能な場合にはNdefMessageに送信するが、場合によっては、NDEFデータが含まれていないTagをスキャンしたり、NDEFデータがMIMEタイプやURIにマッピングできない場合.その場合、Tagと直接コミュニケーションを取り、自分のプロトコル(元のバイトで)で読み書きし、Androidはandroidを使う必要があります.nfc.techパッケージは、表1に示すように、それらの状況に対して汎用的なサポートを提供する.getTechList()メソッドを使用して、技術サポートTagを決定し、androidを使用することができます.nfc.techが提供するクラスのうちの1つは、対応するTagTechnologyオブジェクトを作成する.
表1.サポートするTagテクノロジー
クラス#クラス#
説明
TagTechnology
このインタフェースは、次のすべてのtag technologyクラスで実装する必要があります.
NfcA
NFC-A(ISO 14443-3 A)にアクセスする属性とI/O操作を提供する
NfcB
NFC-B(ISO 14443-3 B)にアクセスする属性とI/O操作を提供する
NfcF
NFC-F(JIS 6319-4)にアクセスする属性とI/O操作を提供する
NfcV
NFC-V(ISO 15693)にアクセスする属性とI/O操作を提供する
IsoDep
ISO-DPP(ISO 14443-4)にアクセスする属性とI/O操作を提供する
Ndef
NDEFとしてフォーマットされたtagのデータへのアクセスとその他の操作を提供する
NdefFormatable
NDEF形式にフォーマットできるtagにフォーマットされた操作を提供する
次のTagテクノロジーはAndroidの給電機器にサポートされることを要求しません.
表2.オプションでサポートされるTagテクノロジー
クラス#クラス#
説明
MifareClassic
AndroidデバイスがMIFAREをサポートしている場合は、MIFARE ClassicターゲットのプロパティとI/O操作を提供します.
MifareUltralight
AndroidデバイスがMIFAREをサポートしている場合は、MIFARE UltralightターゲットのプロパティとI/O操作を提供します.
TagテクニカルワークとACTION_TECH_DISCOVERED Intent
デバイスがNDEFデータのあるTagをスキャンするが、MIMEまたはURIにマッピングできない場合、TagパブリケーションシステムはActivityとACTION_を起動しようとする.TECH_DISCOVERED Intent.非NDEFがスキャンされるとACTION_TECH_DISCOVERDのTagも使用可能である.Tagパブリケーションシステムが解析できない場合は、ラベルのデータを直接スキャンできます.基本的な手順とラベル技術は次のとおりです.
処理したいTagテクノロジーをフィルタするACTION_TECH_DISCOVERED intent. 詳細については、NFCのフィルタリングを参照してください.一般的に言えば.NDEFメッセージがMIMEタイプまたはURIにマッピングできない場合、TagパブリケーションシステムはACTION_を起動しようとする.TECH_DISCOVERD intent,そうでないとスキャンするTagにNDEFデータが含まれない.詳細については、Tagリリースシステムを参照してください.
アプリケーションがIntentを受信すると、図からTagオブジェクトを取得します:
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
呼び出しによりandroid.nfc.techパッケージのクラスのget factoryメソッドは、TagTechnologyのインスタンスを取得する.get factoryメソッドを呼び出す前に、計算はTag技術をサポートしてgetTechList()を呼び出すことができます.たとえば、1つのTagからMifareUltralightのインスタンスを取得するには、MifareUltralight.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
を実行します.Tagsの読み取りと書き込み
NFCタグの読み取りおよび書き込みは、Intentからタグを取得するタグへの接続を作成することに関する.自分のプロトコルを定義してTagにデータを読み書きしなければなりませんそして、Tagを直接使用するとNDEFデータを読み書きできることを覚えておいてください.どのように物を構築したいのか、それは実現できます.MIFARE Ultralight tagの使用方法を以下の例で示す.
package com.example.android.nfc;import android.nfc.Tag;import android.nfc.tech.MifareUltralight;import android.util.Log;import java.io.IOException;import java.nio.charset.Charset;publicclassMifareUltralightTagTester{privatestaticfinalString TAG =MifareUltralightTagTester.class.getSimpleName();publicvoid writeTag(Tag tag,String tagText){MifareUltralight ultralight =MifareUltralight.get(tag);try{ ultralight.connect(); ultralight.writePage(4,"abcd".getBytes(Charset.forName("US-ASCII"))); ultralight.writePage(5,"efgh".getBytes(Charset.forName("US-ASCII"))); ultralight.writePage(6,"ijkl".getBytes(Charset.forName("US-ASCII"))); ultralight.writePage(7,"mnop".getBytes(Charset.forName("US-ASCII")));}catch(IOException e){Log.e(TAG,"IOException while closing MifareUltralight...", e);}finally{try{ ultralight.close();}catch(IOException e){Log.e(TAG,"IOException while closing MifareUltralight...", e);}}}publicString readTag(Tag tag){MifareUltralight mifare =MifareUltralight.get(tag);try{ mifare.connect();byte[] payload = mifare.readPages(4);returnnewString(payload,Charset.forName("US-ASCII"));}catch(IOException e){Log.e(TAG,"IOException while writing MifareUltralight message...", e);}finally{if(mifare !=null){try{ mifare.close();}catch(IOException e){Log.e(TAG,"Error closing tag...", e);}}}returnnull;}}
フロントエンドパブリケーションシステムの使用
フロントエンドパブリケーションシステムは、activityが1つのintentをブロックすることを許可し、他の処理によって同じintentのactivitiesを要求する.このシステムを使用することは、Androidシステムが適切なintentsをあなたに送信できるアプリケーションのためにいくつかのデータ構造を構築することに関する.フロントエンドパブリケーションシステムを有効にするには、次の手順に従います.
あなたのactivityの
onCreate()
メソッドに次のコードを追加します.PendingIntent
オブジェクトを作成し、システムがスキャンされたときにtagの詳細でPendingIntent pendingIntent =PendingIntent.getActivity(this,0,newIntent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),0);
を埋めることができるようにします.Intent filtersで処理したいIntentを宣言し、tagが検出されたときにフロントパブリケーションシステムをチェックし、フロントActivityがIntent filterの要求に合致する場合、フロントのActivityはこのIntentを処理します.該当しない場合、フロントパブリケーションシステムはIntentをIntentパブリケーションシステムに転送します.nullのIntent filtersを指定すると、任意のtagが検出されるとTAG_が受信されます.DISCOVERED intent.次のコード断片はすべてのNDEFを処理します.DISCOVERDのMIMEタイプ.そのため、あなたが望んでいるIntentだけを処理すべきであることに注意してください.
IntentFilter ndef =newIntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);try{ ndef.addDataType("*/*");/* Handles all MIME based dispatches. You should specify only the ones that you need. */}catch(MalformedMimeTypeException e){thrownewRuntimeException("fail", e);} intentFiltersArray =newIntentFilter[]{ndef,};
プログラムが処理するTag technologiesのリストを設定し、Objectを呼び出します.class.getName()メソッドは、処理をサポートしたいtechnologyクラスを取得します.
techListsArray =newString[][]{newString[]{NfcF.class.getName()}};
次の方法を上書きして、フロントパブリケーションシステムをオンまたはオフにします.たとえばonPause()とonResume()メソッドです.プライマリスレッドでenableForegroundDispatch(Activity, PendingIntent, IntentFilter[], String[][])を呼び出し、Activityをフロントに呼び出す必要があります(onResume()でこの点を保証するために呼び出すことができます).得られたNFC tagデータを処理するためにonNewIntentコールバックも上書きします.
publicvoid onPause(){super.onPause(); mAdapter.disableForegroundDispatch(this);}publicvoid onResume(){super.onResume(); mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);}publicvoid onNewIntent(Intent intent){Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);//do something with tagFromIntent}
API Demosから完全な例示的なデモForegroundDispatch例を取得する