最近のスマホのIDmを取得する方法

3,944 views
Skip to first unread message

Kawakami Kouji

unread,
Dec 28, 2014, 8:59:29 AM12/28/14
to android-...@googlegroups.com
皆様

はじめまして、川上と申します。
よろしくお願いいたします。

NFC付Android端末にICカードをかざすとIDが取得できると思います。

TypeA、TypeB、TypeFのIDを取得できるプログラムですが、
TypeBのIDは乱数なので使わず、TypeA、Fだけ反応するように
TECH_DISCOVEREDのフィルタに
android.nfc.tech.NfcAとandroid.nfc.tech.NfcFを設定することで
TypeA、Fのカードは反応してIDが取得でき、
TypeBのカードは反応しない(OSが失敗音を出す)ところまで作りました。

ここで携帯やスマホをカード同じようにかざすと、
比較的古い携帯やスマホはTypeFのIDを取得できましたが
比較的新しいスマホではなぜかTypeBの乱数を取得します。
(docomo、auさんの端末で確認しました)

docomoさんの2013年2月22日の報道発表で
TypeA/Bに対応したピンクのSIMを提供開始したという話や
ソフバン、au、docomoさんが共同でTypeA/B対応を進めているという記事を
知っていたので、もしかしたらそれが原因と推測しています。

そこで皆様に質問です。
上記のようなTypeA,B,Fが混在した端末のTypeFのIDmを
OS無改造のAndroid端末のアプリが取得する方法をご存じの方がいましたら
方法を教えていただけないでしょうか。

何卒よろしくお願いいたします。

Miura.N

unread,
Jan 13, 2015, 10:58:12 AM1/13/15
to android-...@googlegroups.com
三浦と申します。はじめまして、よろしくおねがいします。

TECH_DISCOVEREDのintent-filterに、メタデータのtech-listでNfcA/NfcFのフィルタを加えて、
かざされたらintentで起こされる形で作っているということでしょうか。

KitKat以上のAndroid端末に限られますが、
NfcAdapter.enableReaderMode / disableReaderModeを使うのはいかがでしょうか?
このメソッドのフラグとしてFLAG_READER_NFC_Fを指定し、
activityを起動した状態でFeliCaカードやおサイフケータイをかざしてもらう使い方です。

また、FeliCaに加えて、TypeAのプラスティックICカードも読み込みたいということですと、
フラグは、FLAG_READER_NFC_A | FLAG_READER_NFC_F のようになると思います。
この状態で、読出側のAndroid OSの対向ICカード検知の実装に対しては、
TypeA/B/F対応のおサイフケータイのTypeAが優先的に検知されるようです。
この時、tag.getTechList()を見ると、TypeAとISODEPになっているように見えます。

ジャストアイデアですが、
その時だけ一時的にNfcAdapter.enableReaderModeのフラグの指定を
NFC_Fのみにして、再かざししてもらい、
無事読み込みたら、NfcAdapter.enableReaderModeのフラグをNFC_A|NFC_Bに戻す
ということができると思います。
ざくっとコードを書いて試しましたが、Nexus5を読み取り側にして試したところ、
期待どおりの動作をしました。

ご参考まで。




2014年12月28日日曜日 22時59分29秒 UTC+9 kawakami-k:

Miura.N

unread,
Jan 13, 2015, 9:45:33 PM1/13/15
to android-...@googlegroups.com
一点、誤記がありました。

無事読み込めたら、NfcAdapter.enableReaderModeのフラグをNFC_A|NFC_Fに戻す

ご参考になれば幸いです。

Reply all
Reply to author
Forward
0 new messages