Androidパーミッション別-何してんの?#1 LOCATION編


Pocket

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関連のパーミッションのみ。
数が少ないグループから順次書いていこうと思います。

あと、ジオフェンスはちょっと使ってみたいですね。

 
 

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です