Android 6.0 Marshmallow (API Level 23) ではローカルデバイスIDが取得できない(確定)

Android M preview 2 で自分のMACアドレスとBDアドレスが取得できない 
の続きです。

先日 Android SDK 6.0 の最終盤がリリースされました。
Build.VERSION_CODES.M
のままで
Build.VERSION_CODES.MARSHMALLOW
になってなかったりするのでしれっともう一回更新されるかもしれませんが、まあ少なくとも仕様はほぼ最終版だと信じてもいいでしょう。

Android アプリ開発者が怯える Behavior Changes のページに、今回から Access to Hardware Identifier の項目が追加されました。
To provide users with greater data protection, starting in this release, Android removes programmatic access to the device’s local hardware identifier for apps using the Wi-Fi and Bluetooth APIs. The WifiInfo.getMacAddress() and the BluetoothAdapter.getAddress() methods now return a constant value of 02:00:00:00:00:00.
ユーザデータ保護の目的のため、ローカルデバイス ID はコード上から取得できなくなり、ダミーアドレスが返されます。(意訳)
回避手段はなし。


To access the hardware identifiers of nearby external devices via Bluetooth and Wi-Fi scans, your app must now have the following permissions:
Wi-Fi や Bluetooth のデバイススキャンをするには位置情報系のパーミッションが追加で必要です。(意訳)
位置情報系パーミッションは dangerous レベルなのでランタイムパーミッションです。

API Level 23 以降だけ MAC/BD アドレスの代わりにランダム UUID 使うようなコードを実装するのも馬鹿らしいですし、デバイスを特定したいとゴネる商品企画の人たちをねじ伏せてランダム UUID 実装に完全移行できる機会がついにきたと捉えましょう。(追加システム制約なのにうれしい!)

スキャンが必要な仕様のアプリの人はランタイムパーミッションの実装さえすれば特に仕様変更は不要です。まあそれでも「なんで位置情報が必要なんだよ!」とパーミッション許可してもらえない事案が多発しそうですが。
パーミッション要求するシステムダイアログに、説明用のアプリの固有文言を差し込める口が欲しかったなあと思ったりします。今回提供される API の仕様だと、アプリ固有の説明ダイアログ(無くてもいいですが)と、システムのダイアログの両方をユーザに操作してもらうことになってやや煩雑な感じです。

おわり。

コメント

このブログの人気の投稿

Lumia 920買った - LTE有効化と開発端末登録

Android で Unicode絵文字入力

Nexus 5 買った