このチュートリアルでは、Flutter アプリで現在の GPS 地理位置情報 (経度と緯度) を取得する方法を学びます。また、GPS 位置情報を聞く方法も示しました。経度と緯度が自動的に変化します。
まず、 pubspect.yaml ファイルに次の行を追加して、プロジェクトにgeolocator Flutter パッケージを追加する必要があります。
dependencies:
flutter:
sdk: flutter
geolocator: ^8.0.0
android/app/src/main/AndroidManifest.xml にあるAndroidManifest.xmlファイルにこの権限を追加します。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
輸入:
import 'package:geolocator/geolocator.dart';
bool servicestatus = await Geolocator.isLocationServiceEnabled();
if(servicestatus){
print("GPS service is enabled");
}else{
print("GPS service is disabled.");
}
非同期メソッドを使用して、GPS サービスが有効か無効かを確認できます。 Geolocator.isLocationServiceEnabled();
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
print('Location permissions are denied');
}else if(permission == LocationPermission.deniedForever){
print("'Location permissions are permanently denied");
}else{
print("GPS Location service is granted");
}
}else{
print("GPS Location permission granted.");
}
権限を確認するか Geolocator.checkPermission()、権限が付与されていない場合は権限を要求でき ますGeolocator.requestPermission()。
Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
print(position.longitude); //Output: 80.24599079
print(position.latitude); //Output: 29.6593457
String long = position.longitude.toString();
String lat = position.latitude.toString();
を使用して、経度や緯度などの現在の GPS 位置を取得できます Geolocator.getCurrentPosition()。
import 'dart:async';
LocationSettings locationSettings = LocationSettings(
accuracy: LocationAccuracy.high, //accuracy of the location data
distanceFilter: 100, //minimum distance (measured in meters) a
//device must move horizontally before an update event is generated;
);
StreamSubscription<Position> positionStream = Geolocator.getPositionStream(
locationSettings: locationSettings).listen((Position position) {
print(position.longitude); //Output: 80.24599079
print(position.latitude); //Output: 29.6593457
String long = position.longitude.toString();
String lat = position.latitude.toString();
});
ここで、Geolocator は位置の変更に関するデータを自動的に送信します。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home()
);
}
}
class Home extends StatefulWidget {
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
bool servicestatus = false;
bool haspermission = false;
late LocationPermission permission;
late Position position;
String long = "", lat = "";
late StreamSubscription<Position> positionStream;
@override
void initState() {
checkGps();
super.initState();
}
checkGps() async {
servicestatus = await Geolocator.isLocationServiceEnabled();
if(servicestatus){
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
print('Location permissions are denied');
}else if(permission == LocationPermission.deniedForever){
print("'Location permissions are permanently denied");
}else{
haspermission = true;
}
}else{
haspermission = true;
}
if(haspermission){
setState(() {
//refresh the UI
});
getLocation();
}
}else{
print("GPS Service is not enabled, turn on GPS location");
}
setState(() {
//refresh the UI
});
}
getLocation() async {
position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
print(position.longitude); //Output: 80.24599079
print(position.latitude); //Output: 29.6593457
long = position.longitude.toString();
lat = position.latitude.toString();
setState(() {
//refresh UI
});
LocationSettings locationSettings = LocationSettings(
accuracy: LocationAccuracy.high, //accuracy of the location data
distanceFilter: 100, //minimum distance (measured in meters) a
//device must move horizontally before an update event is generated;
);
StreamSubscription<Position> positionStream = Geolocator.getPositionStream(
locationSettings: locationSettings).listen((Position position) {
print(position.longitude); //Output: 80.24599079
print(position.latitude); //Output: 29.6593457
long = position.longitude.toString();
lat = position.latitude.toString();
setState(() {
//refresh UI on update
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Get GPS Location"),
backgroundColor: Colors.redAccent
),
body: Container(
alignment: Alignment.center,
padding: EdgeInsets.all(50),
child: Column(
children: [
Text(servicestatus? "GPS is Enabled": "GPS is disabled."),
Text(haspermission? "GPS is Enabled": "GPS is disabled."),
Text("Longitude: $long", style:TextStyle(fontSize: 20)),
Text("Latitude: $lat", style: TextStyle(fontSize: 20),)
]
)
)
);
}
}
このようにして、Flutter アプリで現在の GPS 位置を取得したり、GPS 位置の変化を継続的にリッスンしたりできます。