AndroidプラットフォームでGeolocator()を実行すると。 CheckGeolocationPermissionStatus()関数が初めてGeolocationStatusが拒否され、ユーザーに許可を求めていません。 しかし、IOSでは、同じ関数を初めて呼び出すとき、GeolocationStatusが不明であるため、Geolocator()を呼び出す必要が
checkGeolocationPermissionStatusを初めて呼び出すときに、Androidでユーザーに許可を求める方法はありますか?
私のコードの下:
Future<void> getLocation() async {
try {
var serviceEnabled = await Geolocator().isLocationServiceEnabled();
if (serviceEnabled) {
var geolocationStatus =
await Geolocator().checkGeolocationPermissionStatus();
if (geolocationStatus == GeolocationStatus.granted || geolocationStatus == GeolocationStatus.unknown) {
position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
return;
}
}
} catch (e) {
print(e);
}
}
このプラグインマネージャーは、コミュニティの維持やサポートにあまり関心がないようです。多くの問題が発生しましたが、正確な解決策やバグ修正の解決策はありませんでした。
ええ、あなたは正しいです! 私は他の問題も答えがないのを見ました。 = /
@ azeemgujjar 、 @ CNogueira92 、これは
あなたの質問@ CNogueira92に答えるために、AndroidとiOSはパーミッションの処理が少し異なります。 デフォルトでは、Androidは権限を「拒否」として扱います(ユーザーが明示的に拒否していない場合でも)。 iOSには、権限がまだ要求されていない状況に対して特定のステータスがあります(「未決定」と呼ばれ、「不明」と解釈されます)。
どちらのプラットフォームでも、 checkGeolocationPermissionStatus
がdenied
またはunknown
返すときに、アクセス許可を要求するのは問題ありcheckGeolocationPermissionStatus
。 ユーザーが[拒否して再度質問しない]オプションを選択した場合、Geolocatorはこれに気づき、権限を要求しません。
実際には、Geolocatorが内部で行うため、手動で権限を確認する必要はありません。 したがって、コードを次のように安全に更新できます。
Future<void> getLocation() async {
try {
var serviceEnabled = await Geolocator().isLocationServiceEnabled();
if (serviceEnabled) {
position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
} else {
// TODO: ask the user to enable the location services...
}
} catch (e) {
print(e);
}
}
checkGeolocationPermissionStatus
は、権限を手動で確認し、ユーザーに何らかのアクションを実行するように通知する場合にのみ便利な方法です。 私が言及した新しいリリースでは、手動で権限を要求することもできます。 今すぐそれを行いたい場合は、ジオロケーターに付属しているlocation_permissions
プラグインを呼び出す必要があります。 location_permissionsプラグインの詳細については、こちらをご覧ください。