Androidアプリをインストールする時に必ずアプリが使用しているパーミッションの一覧が表示され、同意するかいなかを問われます。
#まぁ、同士しないとインストールできないんですけど
毎回ざっと見て同意するんですけど、結局同意するとインストールしたアプリは何ができるようになるのか?
最近パーミッションを確認できるアプリ『簡易アクセス先チェッカー2』を作った時にいろいろ調べて見ました。
せっかくなのでメモって置こうと思います。
前置き
android-SDK ver19でのパーミッションについて記載します。
AndroidのパーミッションにはprotectionLevelとして、4種類のアクセスレベルが設定されています。
詳しくは→Develop-API Guides-permission
Value | 意味 |
---|---|
normal | デフォルト値。他のアプリ、システム、ユーザーに対して低リスクな許可です。アプリをインストールする時もユーザーへ明示的に同意を求めることなく(=「その他の権限」扱いでクリックしないと表示されない)、自動的に使用されます。 |
dangerous | ユーザーの個人情報へのアクセスやマイナスの影響を与える可能性のある高リスクな許可です。アプリをインストールする時はユーザーへ使用の同意を求めます。 |
signature | パーミッションを宣言したアプリと同じ証明書で署名されたアプリのみ使用できます。証明書が一致すればユーザーへ明示的に同意を求めることなく、自動的に使用されます。よって、基本的にはサードパーティーのアプリはこのパーミッションを使用することができません。もちろん、独自で定義したパーミッションは別です。 |
signatureOrSystem | Androidシステムイメージ内、又は、システムイメージ内にあるアプリ(プリインストールのことかな?)と同じ証明書で署名されたアプリのみ使用できます。基本的にはサードパーティーのアプリはこのパーミッションを使用することができません。 |
ということで、signatureとsignatureOrSystemは使用できないのでパス。
normalとdangerousについて書いていこうと思います。
#1 LOCATION 現在位置情報
位置情報の監視
ユーザー向けパーミッションの説明
パーミッション | Level | 説明 | 使われ方 |
---|---|---|---|
ACCESS_MOCK_LOCATION | dangerous | テスト用擬似ロケーションソース アプリケーションに、テスト用の擬似位置情報ソースの作成を許可します。 許可した場合、悪意あるアプリケーションがGPSや通信事業者などから得た位置情報やステータス情報を 上書きしたり、ランダムにWebサイトへ位置情報などを送信する可能性があります。 |
開発中のテストで使用されるだけ。 許可を要求してくるアプリはあやしい |
ACCESS_LOCATION_EXTRA_COMMANDS | normal | 位置情報プロバイダの追加コマンドにアクセス アプリケーションに、追加位置情報プロバイダコマンドへのアクセスを許可します。 悪意あるアプリが、GPS操作や他の位置情報ソースを妨げる可能性があります。 |
Android標準API以外の制御をさせる場合だと思いますが…よくわからないです。 プリインストールや端末メーカー製アプリ以外では基本使用されない様な気がする(超適当) |
ACCESS_COARSE_LOCATION | dangerous | おおよその位置情報(ネットワークベース) セルラーネットワークデバイスなど、端末のおおよそのの位置を特定できる位置情報がある場合はその情報にアクセスします。 この許可を悪意あるアプリに利用された場合、ユーザーのおおよその現在地が特定される恐れがあります。 |
位置情報を使うアプリではほとんど使用されます。 地図アプリ、位置情報付加して投稿できるコミュニケーションアプリ(LINE,Twitter,FBなど) 悪用されるとかなり致命的なので要注意が必要 |
ACCESS_FINE_LOCATION | dangerous | 詳細位置情報(GPS) 端末内のGPSなど、正確な位置を特定できる位置情報がある場合は、その情報にアクセスします。 この許可を悪意あるアプリに使用された場合、ユーザーの現在地が特定されたり、バッテリー消費が増えたりする恐れがあります。 |
位置情報を使うアプリではほとんど使用されます。 地図アプリ、位置情報付加して投稿できるコミュニケーションアプリ(LINE,Twitter,FBなど) 悪用されるとかなり致命的なので要注意が必要 |
関連メソッド
各パーミッションによって使用制限されるメソッド一覧です。
・ACCESS_MOCK_LOCATION
モックロケーションは、パーミッションの設定以外に、端末の開発者向けオプションで擬似ロケーションを許可していないと使用できません。
対象クラス | 対象メソッド | 説明 |
---|---|---|
LocationManager | addTestProvider(…) | モックロケーションプロバイダの生成 |
removeTestProvider(…) | モックロケーションプロバイダの削除 | |
setTestProviderLocation(…) | モックロケーションプロバイダに現在地情報を設定する | |
clearTestProviderLocation(…) | 引数のプロバイダの全ての位置情報を削除する | |
setTestProviderEnabled(…) | モックロケーションプロバイダを有効にする。有効にしておかないとonLocationChanged()とかが呼ばれない | |
clearTestProviderEnabled(…) | モックロケーションプロバイダを無効にする | |
setTestProviderStatus(…) | モックロケーションプロバイダの状態(実行可否、更新時間など)を設定できる | |
clearTestProviderStatus(…) | モックロケーションプロバイダ状態のクリア |
・ACCESS_LOCATION_EXTRA_COMMANDS
このパーミッション単体だけ設定してももちろん意味がありません。少なくともACCESS_FINE_LOCATIONかACESS_COARSE_LOCATIONが必要。
対象クラス | 対象メソッド | 説明 |
---|---|---|
LocationManager | sendExtraCommand(…) | ロケーションプロバイダへ追加コマンドを送る。追加コマンドに何があるのかは不明? 参考:http://stackoverflow.com/questions/9917888/android-access-location-extra-commands-permission-uses |
・ACCESS_COARSE_LOCATION
・ACCESS_FINE_LOCATION
COARSE_LOCATIONは、パーミッション設定に加えて端末の位置情報サービス設定で「Googleの位置情報サービス」を有効にしていないと使用できません。
FINE_LOCATIONは、パーミッション設定に加え、端末の位置情報サービス設定で「GPS衛星」を有効にしていないと使用できません。
位置情報に関連しそうなメソッドは基本的にはCOARSE(低制度)、FINE(高精度)どちらかが使用できれば動きます。
セルロケーション情報に関連しそうなメソッドは、COARSEが必要です。
GPS情報を使用するときはFINEが必要です。
対象クラス | 対象メソッド | 説明 |
---|---|---|
CountryDetector | * | セルラーネットワーク、位置情報、SIM、端末のロケールせて値からユーザーのいる国を特定する。 ※ACCESS_COARSE_LOCATIONとACCESS_FINE_LOCATIONの両方が必要。 #使ったことないのであまり詳しくは分からないです。 |
LocationManager | addProximityAlert(…) | 指定した領域に端末が入った/出た時にIntentを発行できます。 #いろいろ面白いことができそうな予感がする( ̄ー ̄)ニヤリ |
removeProximityAlert(…) | アラート解除する。 | |
addGeofence(…) | ジオフェンスの追加。 ※ACCESS_FINE_LOCATIONが必要 |
|
removeGeofence(…) | ジオフェンスの削除。 ※ACCESS_FINE_LOCATIONが必要 |
|
removeAllGeofence(…) | 全てのジオフェンスを削除。 ※ACCESS_FINE_LOCATIONが必要 |
|
addGpsStatusListener(…) | GPS状態変化時のリスナー追加。 ※ACCESS_FINE_LOCATIONが必要 |
|
addNmeaListener(…) | GPSからNMEA形式のデータを受信した時のリスナー追加。 ※ACCESS_FINE_LOCATIONが必要 |
|
TelephonyManager | getCellLocation() | 現在の端末のセルID、ロケーションエリアコードを取得する。 GSM/CDMAどちらかが必要で、LTE回線だけの場合はNull。 |
getAllCellInfo() | 端末のセル情報を全て取得する。※ACCESS_COARSE_LOCATIONが必要 | |
WebSetting | setGeolocationEnabled(…) | WebViewで位置情報を使用するか。 |
GeofenceHardware ※ACCESS_FINE_LOCATIONが必要 |
addGeofence(…) | ジオフェンスを追加する。ジオフェンスについてはこちらがわかりやすいです。→「ジオフェンシング」とは? |
removeGeofence(…) | ジオフェンスを削除する。 | |
pauseGeofance(…) | ジオフェンスのモニタリングを一時停止する。 | |
resumeGeofance(…) | ジオフェンスのモニタリングを再開する。 | |
registerForMonitorStateChangeCallback(…) | Callbackの追加 | |
unregisterForMonitorStateChangeCallback(…) | Callbackの削除 |
あとがき
ひとまずLOCATION関連のパーミッションのみ。
数が少ないグループから順次書いていこうと思います。
あと、ジオフェンスはちょっと使ってみたいですね。