#navi(開発メモ/Android) ''調査中につき、内容に誤りがあるかもしれません'' #contents *NFCの種類 [#ob2ddc4a] |FeliCa|SONYの独自仕様。処理が速いらしい| |Mifare|Type A に基づいた規格| |Type A|taspo| |Type B|住民基本台帳カード、自動車運転免許証、パスポート| |Type C|| *NFCのディスパッチ方式 [#r5177873] |モード |優先順位|概要|h |NDEF_DISCOVERED|1 || |TECH_DISCOVERED|2 || |TAG_DISCOVERED |3 || *NFCを読み込むためのAndroidManifest.xmlの記述 [#jaefbb23] **NDEF_DISCOVERED [#nff24702] 未調査 **TECH_DISCOVERED [#j8167776] ポイント -uses-feature -uses-permisson -intent-filter -meta-data --ここで、どのNFCタイプに対応するかを定義するXMLを指定する #codeprettify{{ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xx.xx.xx.xxxxx" android:versionCode="1" android:versionName="1.0" > <!-- uses-feature、uses-permissonを追加する --> <uses-feature android:name="android.hardware.nfc" android:required="true" /> <uses-permission android:name="android.permission.NFC" /> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="xx.xx.xx.xxxx.MainActivity" android:label="@string/app_name" android:permission="android.permission.NFC" > <!-- intent-filterを追加する --> <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- meta-dataを追加する --> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_filter" /> </activity> </application> </manifest> }} **TAG_DISCOVERED [#lf615e3f] ポイント -uses-feature -uses-permisson -intent-filter -meta-data --ここで、どのNFCタイプに対応するかを定義するXMLを指定する #codeprettify{{ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.project.dev.nfcreader" android:versionCode="1" android:versionName="1.0" > <!-- uses-feature、uses-permissonを追加する --> <uses-feature android:name="android.hardware.nfc" android:required="true" /> <uses-permission android:name="android.permission.NFC" /> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="jp.project.dev.nfcreader.MainActivity" android:label="@string/app_name" android:permission="android.permission.NFC" > <!-- intent-filterを追加する --> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- meta-dataを追加する --> <meta-data android:name="android.nfc.action.TAG_DISCOVERED" android:resource="@xml/nfc_filter" /> </activity> </application> </manifest> }} *tech-listの作成 [#f601d315] AndroidManifest.xmlのmeta-dataで指定したXMLを作成します。~ 作成する場所は、/プロジェクト/res/xmlになります。~ 今回の例だと、/プロジェクト/res/xml/nfc_filter.xmlを作成します。 #codeprettify{{ <?xml version="1.0" encoding="utf-8"?> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.IsoDep</tech> </tech-list> <tech-list> <tech>android.nfc.tech.MifareClassic</tech> </tech-list> <tech-list> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> <tech-list> <tech>android.nfc.tech.Ndef</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NdefFormatable</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcA</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcB</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcBarcode</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcF</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcV</tech> </tech-list> </resources> }} 以下のように記述すると、うまく動作しない場合があるようです。~ (もしかするとディスパッチする方法によって変わるかも?) #codeprettify{{ <?xml version="1.0" encoding="utf-8"?> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.IsoDep</tech> <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.MifareUltralight</tech> <tech>android.nfc.tech.Ndef</tech> <tech>android.nfc.tech.NdefFormatable</tech> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.NfcBarcode</tech> <tech>android.nfc.tech.NfcF</tech> <tech>android.nfc.tech.NfcV</tech> </tech-list> </resources> }} *intentを受け取る [#ga65391e] NFCを読み込むと、intent経由でActivityが呼び出されます。~ *参考 [#y54a53e3] -[[ソフトウェア技術ドキュメントを勝手に翻訳 i.1 NFC の基本:http://www.techdoctranslator.com/android/guide/nfc/nfc]]