86

ユーザーの地理位置情報を追跡し、地図上にルートを描画する Android アプリを構築しています。

こちら で説明されているように、Google Play サービスのロケーション API を使用しています。

私のアプリケーションが許可を必要とすることは直感的にわかりますACCESS_FINE_LOCATION。これをマニフェストに入れました。

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

私もACCESS_COARSE_LOCATION許可が必要ですか?大まかな場所が必要なユースケースは何ですか?

4

5 に答える 5

102

ACCESS_COARSE_LOCATION 権限も必要ですか?

いいえ。

大まかな場所が必要なユースケースは何ですか?

を要求しないがACCESS_FINE_LOCATION、位置データが必要であり、そのデータをあいまいにすることをいとわない場合 (たとえば、ユーザーの位置から 1 街区あたりまで)。の場合、LocationManager使用できるのはNETWORK_PROVIDER;のみです。Play Services 融合ロケーション プロバイダの場合は、これを内部で処理する必要があります。

むかしむかしむかしむかし、ユーザーはインストール時に、アプリが位置情報へのアクセスを粗いものにするか細かいものにするかを知らされていました。ユーザーは、大まかなアクセスを必要とするアプリを受け入れ、細かいアクセスを必要とするアプリを拒否する場合があります。

このための UI が変更されたため、ユーザーは、アプリが大まかな位置情報の許可を必要とするか、詳細な位置情報の許可を必要とするかを判断するのがかなり難しくなるため、ほとんどの開発者は詳細な位置情報の許可のみを求めているのではないかと思います。そうは言っても、アプリがそのレベルの精度を必要としないことがわかっている場合 (たとえば、天気予報の場所が必要な場合)、大まかな位置情報の許可を求めることは、プライバシーとプライバシーの面で優れた「帽子のヒント」です。将来また有益になるかもしれません。

UPDATE 2021-11-16 : Android 12 は、要求すると UI を変更しますACCESS_FINE_LOCATION。ユーザーは、「正確」の代わりに「近似」を選択して、アクセス権のみを取得するようにダウングレードするオプションを利用できるようになりました。ACCESS_COARSE_LOCATION

于 2016-03-08T14:13:35.850 に答える
38

いいえ、大まかな場所を使用する必要はありません。

粗い位置はネットワーク プロバイダーの位置であり、細かい位置は GPS プロバイダーとネットワーク ロケーション プロバイダーの両方です。そのため、優れた場所は両方をカバーし、別のものを使用する必要はありません.

NETWORK_PROVIDER または GPS_PROVIDER から位置情報の更新を受け取るには、Android マニフェスト ファイルでそれぞれ ACCESS_COARSE_LOCATION または ACCESS_FINE_LOCATION 権限を宣言して、ユーザーの権限を要求する必要があります。これらのアクセス許可がないと、アプリケーションは実行時に場所の更新を要求するときに失敗します。

NETWORK_PROVIDER と GPS_PROVIDER の両方を使用している場合は、両方のプロバイダーのアクセス許可が含まれているため、ACCESS_FINE_LOCATION アクセス許可のみを要求する必要があります。ACCESS_COARSE_LOCATION のアクセス許可は、NETWORK_PROVIDER へのアクセスのみを許可します。

これは参照用のリンクです。

于 2016-03-08T14:14:43.680 に答える
3

ACCESS_FINE_LOCATION には ACCESS_COARSE_LOCATION が含まれます。ただし、キャッチがあります。

ACCESS_COARSE_LOCATION は、バッテリーに優しい最後の既知の場所を提供しますhttps://developer.android.com/training/location/retrieve-current.html#setup これは Google Play Services に依存しています

ただし、ライブ/リアルタイムの場所のようなものが必要な場合は、ACCESS_FINE_LOCATION を使用してください。ライブ/リアルタイムの場所が提供されます。ただし、LocationListener を使用する必要があります。

于 2020-02-26T05:26:25.973 に答える