Android 11 Labs の Day 1 で気になったところだけメモ。
(Day 2 はこちら)
はじめに
- 2020年02月に Developer Preview 開始
- 3月、4月も Developer Preview、5月に Beta版 Pixcel にインストール可能
- 7月 - 9月 に正式版リリース予定、たぶん9月ごろかなあ
- 正式版用意できたら Pixel にはすぐ配信される
パーミッションについての開発者向け最新技術情報
- 位置情報、マイク、カメラのパーミッション取得に「今回だけ許可する」Only this timeが追加される
- コード上は許可は許可だけど、ストレージに「許可済」とかいうのを保持して実装したりしてたらおかしくなるかもね
- なぜパーミッションの取得をしようとしているのか、説明しようね
- 一度拒否されたかどうか判定できる shouldShowRequestPermissionRationale()
- 位置情報
- フォアグラウンド、バックグラウンドでそれぞれパーミッションが分かれる(10 では任意だったけど 11 から必須)
- フォアグラウンドのパーミッションがないとバックグラウンドのパーミッションは取れない
- バックグラウンドのパーミッションは OS の設定画面でおこなうようになる
- 同時に取得できない
- パーミッション取得のダイアログの表示回数に制限(2回)があって、何回も許可ダイアログだせなくなる
端末上の他のアプリの情報取得の制限について
- getPackageManager().getInstalledPackages() のことについてはなす
- 端末内にインストールされているアプリ一覧の取得に一部制限がかかる
- manifest に記載されている条件に一致するアプリだけ取得できるようになる
- 現状のコードを壊さないようにしてくれているらしい
- アプリのアプリケーションID(自分のアプリ以外)を指定すると Exception がでる(コードこんな感じ getPackageInfo("another.app", 0))
- manifest に <queries> が書ける
- getPackage したいアプリケーションID を書く
- intent-filter を指定することもできる
- QUERY_ALL_PACKAGES というパーミッションを取得すれば、今までどおりすべてのアプリ情報が取得できる
MACアドレス取得制限、System Alert Window 利用制限などについて
- mac アドレスの取得ができなくなる
- ネットワークインターフェイスのリスト取得では IPv4 のみが返されるようになる
- NETWORK_ROUTE の bind() というメソッドは呼び出せなくなるので ConnectionManager のやつを使ってね
Q&A
- Android 10 から 11 にアップグレードした場合、既に許可済みのパーミッションはリセットされるのか
- 再度要求されることはない
- 実際に試した方がいいかもね
- Only this time で許可された場合、プロセスが生きてる限り有効なのか
- そういうわけじゃない
- アプリがフォアグラウンドにある状態なら許可状態
- ただしバックグラウンドにいった瞬間に破棄されるわけではなく、いくらかの猶予期間がある
- パーミッション取得ダイアログの表示回数制限はいつリセットされるのか
- リセットされない
- 位置情報パーミッション取得のとき「利用中のみ許可」はアプリがバックグラウンドにいくと取得できなくなるのか(カーナビアプリで位置情報つかってて音楽アプリを起動したとき)
- アプリから起動するサービスがフォアグラウンドサービスなら、フォアグラウンドのパーミッションが許可されていればOK
- アプリがバックグラウンドにいってもサービスは動いているから大丈夫らしい
- 「今回だけ許可する」は、位置情報、マイク、カメラのみなのか
- そうです
- Bluetooth LE スキャンにも位置情報パーミッションの「今回だけ許可」とかバックグラウンドパーミッションは影響するか
- しないはず
- 許可されたパーミッションが「今回だけ許可」で許可されたのかどうか判定する方法はあるか
- ない
- パーミッションダイアログの表示制限を超えたとき、ユーザーが許可するにはどうすればいいのか
- OS のアプリの設定から許可してもらうしかなさそう
- パーミッションダイアログの「今後表示しない」はなくなるか
- まだわからない
- MACアドレス取得は端末をユニークに特定するために利用しているが、そのような目的の API は用意されているか
- ある
- Advertising ID(ユーザーがリセットできちゃうけどね)
- パーミッションダイアログの表示制限はインストールスコープでしょうか
- そうです
- カメラ撮影で位置情報が許可されていないと GPS メタデータは付与されない
- そうです
- パーミッションまわりの変更でコードの変更する必要があるか
- 基本的にはないけどちゃんとなぜパーミッション取得しようとしてるのかとか説明してね
- パーミッションダイアログのメッセージを変更できるようにしたい
- 似たようなものはたぶん作れるから(チュートリアルとか)がんばって
- 自由に変更できちゃうとユーザーが「このダイアログをアプリが出してるのか OS が出してるのか」判断できなくなっちゃうからなあ