ロケーション権限を許可している間は正常に機能していますが、ロケーション権限を拒否している間、次のエラーが発生します。
Dartエラー:未処理の例外:
PlatformException(PERMISSION_DENIED、位置データへのアクセスが拒否されました、null)
期待動作は私にnull応答を与えるはずです。そうすれば、さらに先に進むことができます。
pubspec.yamlにpubをインポートします
ボタンタップイベントに次のコードを書き込む
試す {
位置position = await Geolocator()
.getCurrentPosition(desiredAccuracy:LocationAccuracy.high);
} catch(e){
print(e);
}
エラーが発生します。
バージョン: 1.0.1
[✓]フラッター(チャンネルマスター、v1.0.1-pre.2、Mac OS X 10.14 18A384a、ロケールen-GB)
[✓] Androidツールチェーン-Androidデバイス用に開発(Android SDK 28.0.3)
[✓] iOSツールチェーン-iOSデバイス用に開発(Xcode 10.1)
[✓] Android Studio(バージョン3.2)
[✓] VS Code(バージョン1.29.1)
[✓]接続されたデバイス(1つ利用可能)
•問題は見つかりませんでした。
プラットホーム:
これを処理する方法を解決しましたか
これに対する回避策はありますか?
@YogeshLegendkiller @kaumudpa回避策が必要な場合は、呼び出しをキャッチして、PlatformExceptionでnullを返します。
@ YogeshLegendkiller 、 @ kaumudpa 、 @ jaumardが提供する
別のアプローチは、 checkGeolocationPermissionStatus
メソッドを使用し、 getCurrentPosition
、 getLastKnownPosition
またはgetPositionStream
呼び出す前に、ステータスがPermissionStatus.granted
に設定されていることを確認することです。 getPositionStream
メソッド。 ただし、これは、自分でアクセス許可を要求するように注意する必要があることを意味します。 例えば:
Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
Position position = await geolocator.getCurrentPosition();
}
許可を求める方法は?
@ abdullah4oneあなたはpermission_handlerを使用し
import 'package:permission_handler/permission_handler.dart';
Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
返信が遅れる可能性がありますが、アプリがiOSで許可を求めておらず、Androidでも完全に正常に機能しているという同じ問題に直面していました。
許可を求められなかったため、許可コードがiOSで機能しませんでした。 手動で許可を求めるために使用できる「location_permissions」という名前のパッケージを見つけました。
手順は次のとおりです
パッケージをファイルにインポートします
import'package :location_permissions / location_permissions.dart ';
許可を求めるページに次のコードを追加します。 (アプリの最初のページに追加することをお勧めします。)
<strong i="16">@override</strong>
void initState() {
....
if (Platform.isIOS) {
location_permission();
}
....
}
同じファイルに次の2つのメソッドを追加します
void location_permission()async {
最終的なPermissionStatusパーミッション= await _getLocationPermission();
if(permission == PermissionStatus.granted){
最終位置= geolocator.getCurrentPosition(を待つ
DesiredAccuracy:LocationAccuracy.best);
// Use the position to do whatever...
}
}
未来
最終的なPermissionStatusパーミッション= LocationPermissions()を待つ
.checkPermissionStatus(level:LocationPermissionLevel.location);
if (permission != PermissionStatus.granted) {
final PermissionStatus permissionStatus = await LocationPermissions()
.requestPermissions(
permissionLevel: LocationPermissionLevel.location);
return permissionStatus;
} else {
return permission;
}
}
これで、iOSアプリに場所の許可を求めるポップアップが表示されるはずです。
最も参考になるコメント
@ YogeshLegendkiller 、 @ kaumudpa 、 @ jaumardが提供する
別のアプローチは、
checkGeolocationPermissionStatus
メソッドを使用し、getCurrentPosition
、getLastKnownPosition
またはgetPositionStream
呼び出す前に、ステータスがPermissionStatus.granted
に設定されていることを確認することです。getPositionStream
メソッド。 ただし、これは、自分でアクセス許可を要求するように注意する必要があることを意味します。 例えば: