#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]]


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS