🤖

JetpackComposeでFelica読み込みアプリを作った。

2021/09/02に公開

Felica読み込みアプリを作ったので備忘録とまとめ

今回作ったもの

https://github.com/nakatani-takashi/nfc_test

NFCについてざっくり

  • NFCとは近距離無線通信の規格のこと
  • FelicaはSonyが推進しているNFCに準拠した方式
  • 読み込むためにはPollingコマンドを実行して何やかんやする。
  • 2byteとか16byteとかで管理されてるので変換する。

ざっくり解説

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.nfc_test">

    <uses-permission android:name="android.permission.NFC" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"

NFC機能を使えるようにするためにパーミッション追加

var nfcAdapter: NfcAdapter? = null
nfcAdapter = NfcAdapter.getDefaultAdapter(this)

NfcAdapterを用意して初期化

enableReaderModeで読み取り機能を呼び出して、

activity、callback,NFCの種類,なんかよくわからん(よくわからんのでnullでおk(ほんまか??))

を渡す。

nfcAdapter?.enableReaderMode(
    activity,
    MyReaderCallback(), // カスタムコールバック
    NfcAdapter.FLAG_READER_NFC_F, // NFCの種類
    null
)

こんな感じ。

読み込んだ後にどうのこうのしたい場合は、

コールバックをカスタムして処理する。

class MyReaderCallback : ReaderCallback {
        override fun onTagDiscovered(tag: Tag) {
            Log.d("Hoge", "Tag discoverd.")

            //get idm
            val idm = tag.id
            val idmString = bytesToHexString(idm)
            Log.d("Hoge", idmString)
            id = idmString
            if (id != "") {
                nfcAdapter?.disableReaderMode(activity)
                scope.launch { state.hide() }
            }
        }
    }
    
    fun bytesToHexString(bytes: ByteArray): String {
    val sb = StringBuilder()
    val formatter = Formatter(sb)
    for (b in bytes) {
        formatter.format("%02x", b)
    }
    return sb.toString().uppercase(Locale.getDefault())
}

今回はこんな感じ。

idmを取得したらbytesToHexString()で変換し、変換したもの返す。

値が取得できたらモーダルを閉じる。

みたいな事をしている。

参考記事

https://www.sony.co.jp/Products/felica/business/tech-support/st_usmnl.html

https://developer.android.com/guide/topics/connectivity/nfc/nfc?hl=ja

https://developer.android.com/reference/android/nfc/NfcAdapter?hl=ja#ACTION_TECH_DISCOVERED

https://www.kenichi-odo.com/articles/2020_10_08_read-suica-by-android

https://qiita.com/YasuakiNakazawa/items/3109df682af2a7032f8d

https://qiita.com/vram/items/c6f316492e6af016dbd2

https://blog.mori-soft.com/entry/2020/09/14/193111

https://qiita.com/zaburo/items/6a34dfd8f87d7ffba56a

https://www.dcom-web.co.jp/lab/mobile/android/nfc_tutorial1

https://sites.google.com/site/hiro99ma/nfc/experiment/android-nfc/create_project1

https://qiita.com/androhi/items/e20b9ac7f7173f12b484

https://seesaawiki.jp/w/moonlight_aska/d/NFC��ͭ��/̵������ǧ����

Discussion