Android13になってタグが離れた場合にTagLostExceptionではなくSecurityExceptionが発生するようになっていた。
謎のエラー
NFCの操作でSecurityExceptionが起きていることがCrashlyticsで検知された。見たことがないパターンだったので調査。
TagLostException
Android12まではNFCでタグ(カード等)の操作をする際に端末等からタグが捕捉されていない場合はTagLostExceptionが発生していた。
かざされたカードが動いて範囲からずれた場合にも発生する。
私のアプリではこれを検知してかざし直しの要求をしていた。
SecurityException
Android13からタグ操作を行う際に必ず呼ばれるgetTagServiceでチェックが行われるようになっている。
タグが捕捉されていない場合はSecurityExceptionが投げられる。
対応
TagLostExceptionをキャッチしていたところでSecurityExceptionもキャッチするように修正する必要がある。
TagLostExceptionもDeprecatedにならずに残っている。どんな理由があったのだろうか。
追記
この変更ですが、脆弱性対応でした。
https://nvd.nist.gov/vuln/detail/CVE-2022-20199
https://source.android.com/security/bulletin/pixel/2022-12-01