質問: ### 前提・実現したいこと Android端末側(Kotlin) 1Androidアプリを起動 2IMEIを取得 3IMEIを発信 PC側(Python2.7) 4カードリーダ(PaSoRi)で読取 5IMEIをprint出力 ### 発生している問題 Android端末を使用せず学生証やAimeといったICカード(TypeA)のIDmの読み取り、出力はできましたが、Android端末から発信されたIMEIを読み取る方法がわかりません。 ### 補足情報(FW/ツールのバージョンなど) Androidアプリ(Kotlin) PC(Python2.7)
回答: 私の方でご質問の意図を取り違えているのかもしれませんが、用語がごっちゃになっているように思います。 IMEIは携帯電話であるAndroid端末自体についている番号なので、外部のICカードリーダーライターでは読み出せません。これをAndroidのプログラムで取得するには、APIの`getDeviceId`メソッドを使うことになると思います。 getDeviceId) ただし、`This method was deprecated in API level 26.`とあるようにAPIレベルによっては推奨されないAPIになっているので注意してください。 > > Android端末を使用せず学生証やAimeといったICカード(TypeA)のIDmの読み取り、出力はできましたが、Android端末から発信されたIMEIを読み取る方法がわかりません。 > > > この場合、IMEIはNFCとは関係ありません。Type-A(Mifare Ultralight等)やFeliCaはパソリで読むことはできますが、これらは非接触型のICカードです。もし、IMEIではなく、SIMカードが持っている**IMSI**を読みたいというのであれば、PCで使う場合は接触型、それもSIMカードを差し込んで読めるタイプのICカードリーダーライターを使うことになります。 ですので、質問のタイトルどおりに「Android端末のIMEIを読み取りたい」と言うのであれば、Android端末上のプログラムで前述のAPI`getDeviceId`を使うことになるかと思います。PCでは読み出すことはできません。 **コメントをいただいての追記です。**[2018/11/28 15:07] > > PaSoRiでは、Android端末によって発信された情報は読み取れないということでしょうか。 > > > 要望と端末の条件によってはできる場合もあります。 まず、理解の為の前提知識として、SONYのパソリ(PaSoRi)のような非接触型のICカードリーダーが何をしているかと言うと、リーダーライター側から電波を発し、電磁誘導で電力を起こしてICカード側のCPU/カードOSを起動し、その磁場の中でリーダーライターとICカードが各種のデータ送受信をしています。ですので、パソリの相手はあくまで非接触型のICカードです。 で、対パソリとしてAndroid端末を使う場合、Android端末自身をICカードとして振舞わせる「カードエミュレーション」機能で要求を満たせる場合があります。 Host-based card emulation overview ※「Android Card Emulation Mode」などと検索すると色々とヒットしますので見てみてください。 ですがそのAndroid端末がNFC対応であっても、Androidのバージョン、更にはMifareやFeliCa等、ICカードの種類にも影響することが多いです。また、Type-AのMifareで言うUIDや、FeliCaのIDmのようなカード固有のIDを自由に変えることはできないと思います。 ですので、最終的にやりたいことが > > Androidアプリで学生証をスマートフォンに登録し、そこで得た学生証のIDmをスマートフォンから発信したい > > > だけなのであれば、Androidアプリで学生証のID(UIDかIDm?)やその他のデータを読み、別の方法、例えばWiFiやLTEを利用してソケット通信などでデータを送信する方が簡単だと思います。