Androidのメモとか

ポキオの日記です。今日も遅延してない。

Android 12でBluetoothは位置情報権限の呪縛から解かれる

スポンサードリンク

久々にAndroidの話。

ポキオ Android 12 BLUETOOTH_SCAN BLUETOOTH_CONNECT permission

tl:dr

  • いままではBluetoothの利用には位置情報の権限が必要でした
  • Android 12からBluetooth専用の権限が新設され、位置情報の権限は不要になります

developer.android.com

忌まわしき位置情報の権限

Androidの話なので、iOSユーザーの方はポカーンって感じかもしれないですが。

ポキオ Android 12 BLUETOOTH_SCAN BLUETOOTH_CONNECT permission

Androidはユーザーのプライバシーを守るために、Android 6からRuntime Permissionsを実装し、アプリがスマホの一部のリソースを使う前に、アプリがユーザーに対して権限の付与を尋ねるという機能が入りました。

たとえば、地図アプリや、アプリでどこかのスポットにチェックインしたりするときなど、アプリがスマホの位置情報をアクセスする際は、予めユーザーに対して位置情報へのアクセスを許可してもらう必要があり、許可がおりて初めて位置情報にアクセスできるようになります。

ただし、ここでポイントなのは、Bluetooth(BLE)やWi−Fiのスキャンをする際も位置情報アクセスの権限取得が何故か必要ということです。Android側のロジックとしては、BLEビーコンやWi−Fiのアクセスポイントのスキャン結果とそれぞれの電波強度から位置情報が推測できるため、そのような制約を設けていると思われるのですが、アプリを使っているユーザーからは、そんな内部の都合なんて理解できるはずがありません。

結果として、アプリとしては位置情報がほしいわけでもないのにBLEやWi− Fiを使う際は、ユーザーに対して位置情報へのアクセス権限を求めざるを得ず、ユーザーにとってみれば、なぜ位置情報へのアクセスを求められているのかがわからず、変に怪しまれるということが多々あったわけです。

ようやくAndroid 12で仕様が変わります

この状況が2021年秋にリリースされるAndroid 12で大きくかわります。

ポキオ Android 12 BLUETOOTH_SCAN BLUETOOTH_CONNECT permission

Android 12では、新たにBluetooth利用のための権限が2つ新設されます。

これにより、今までAndroidManifest.xmlで、

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

のように宣言していた位置情報アクセスの権限でしたが、BLEのスキャンと接続をするだけであれば、上記の権限は不要で、

<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
                 android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

というように、専用の権限利用の宣言だけをすれば良くなりました。ユーザーの見た目的にもBLE利用の際に求められる権限は、

Allow [an app] to find, connect to, and determine relative position of nearby devices.

のような、わかりやすい理由で権限を求められるようになります。

戦いはこれで終わりなのか?

というわけで、新しいOSでは、BLE利用と位置情報利用のための権限が分かれたことで、ユーザーフレンドリーな仕様に一歩近づいたわけです。

ポキオ Android 12 BLUETOOTH_SCAN BLUETOOTH_CONNECT permission

ただし、これはあくまでもAndroid 12のデバイスで動作するアプリの話であって、依然として大多数を占めるAndroid 11以下のデバイスでは関係ない話です。

なので、アプリデベロッパーとしてはぬか喜びすることなく、当面の間はAndroid 12で増えた権限のハンドリングをしつつ、Android 11以下のデバイスを考慮した設計が必要になりそうです。悲しいかな、デベロッパーの諸兄姉は目をつぶっていてもif文を無限にコーディングできるスキルを持っているはずなので、容易い話かと思いますが。

一方でユーザーも、急にアプリが位置情報の権限を要求してきても焦らずに、許可・不許可をする必要があります。もしかしたら、Bluetoothを使いたいだけなのに位置情報の権限を要求しているのかもしれません。(まぁ、そういうときは、アプリはその旨をユーザーに伝えるべきですが)位置情報に限らずそのような権限はあとからでも不許可に倒すことも可能なので、脳死で許可・不許可をせずに、冷静に考えて決めてほしいなと願っています。

でも、あんまり不許可にしないでね!もしかしたらバグるかもしれないから!(笑)

Androidアプリ開発 74のアンチパターン

Androidアプリ開発 74のアンチパターン

  • 作者:深見 浩和
  • 発売日: 2017/09/27
  • メディア: 単行本(ソフトカバー)

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。