iOS GPS 設定によるポップアップ、バックグラウンド処理修正。Android は未確認
This commit is contained in:
@ -946,6 +946,7 @@ class DestinationController extends GetxController {
|
||||
is_checkin: isCheckin,
|
||||
created_at: DateTime.now().millisecondsSinceEpoch);
|
||||
var res = await db.insertGps(gps_data);
|
||||
//debugPrint("Saved GPS data into DB...");
|
||||
}
|
||||
} catch (err) {
|
||||
print("errr ready gps ${err}");
|
||||
@ -1202,7 +1203,10 @@ class DestinationController extends GetxController {
|
||||
}
|
||||
|
||||
// コントローラーの初期化時に呼び出されるライフサイクルメソッドです。
|
||||
//
|
||||
//
|
||||
bool inError=false;
|
||||
bool isRunningBackgroundGPS=false;
|
||||
|
||||
@override
|
||||
void onInit() async {
|
||||
super.onInit();
|
||||
@ -1225,7 +1229,53 @@ class DestinationController extends GetxController {
|
||||
handleLocationUpdate(locationMarkerPosition);
|
||||
//}
|
||||
}, onError: (err) {
|
||||
print("Location Error: $err");
|
||||
if(inError==false){
|
||||
inError = true;
|
||||
debugPrint("Location Error: $err");
|
||||
// エラーが発生した場合、locationMarkerPositionStreamControllerにエラーを追加します。
|
||||
locationController.locationMarkerPositionStreamController.addError(err);
|
||||
|
||||
// ここにエラー発生時の処理を追加します。
|
||||
if (err is LocationServiceDisabledException) {
|
||||
// 位置情報サービスが無効になっている場合の処理
|
||||
print('Location services are disabled');
|
||||
Get.snackbar(
|
||||
'エラー',
|
||||
'位置情報サービスが無効になっています。設定画面から位置情報サービスを有効にして下さい。不明な場合にはエンジニアスタッフにお問い合わせください。',
|
||||
backgroundColor: Colors.red,
|
||||
colorText: Colors.white,
|
||||
duration: Duration(seconds: 3),
|
||||
);
|
||||
inError = false;
|
||||
} else if (err is PermissionDeniedException) {
|
||||
// 位置情報の権限がない場合の処理
|
||||
print('Location permissions are denied');
|
||||
Get.snackbar(
|
||||
'エラー',
|
||||
'位置情報サービスが許可されていません。設定画面から岐阜ナビの位置情報サービスを許可して下さい。不明な場合にはエンジニアスタッフにお問い合わせください。',
|
||||
backgroundColor: Colors.red,
|
||||
colorText: Colors.white,
|
||||
duration: Duration(seconds: 3),
|
||||
);
|
||||
inError = false;
|
||||
} else {
|
||||
// その他のエラーの場合の処理
|
||||
print('Location Error: $err');
|
||||
Get.snackbar(
|
||||
'エラー',
|
||||
'位置情報サービスに問題が発生しました。位置情報サービスを再起動していますので少しお待ちください。',
|
||||
backgroundColor: Colors.red,
|
||||
colorText: Colors.white,
|
||||
duration: Duration(seconds: 3),
|
||||
);
|
||||
|
||||
// GPSデータのListenを再開する処理を追加
|
||||
if( isRunningBackgroundGPS==false && inError ) {
|
||||
restartGPS();
|
||||
}
|
||||
}
|
||||
}
|
||||
//print("Location Error: $err");
|
||||
});
|
||||
|
||||
startGame();
|
||||
@ -1233,6 +1283,14 @@ class DestinationController extends GetxController {
|
||||
checkGPSDataReceived();
|
||||
}
|
||||
|
||||
void restartGPS(){
|
||||
// GPSデータのListenを再開する処理を追加
|
||||
Future.delayed(Duration(seconds: 5), () {
|
||||
locationController.startPositionStream();
|
||||
inError=false;
|
||||
});
|
||||
}
|
||||
|
||||
// コントローラーのクローズ時に呼び出されるライフサイクルメソッドです。
|
||||
//
|
||||
@override
|
||||
@ -1248,18 +1306,23 @@ class DestinationController extends GetxController {
|
||||
//
|
||||
// 要検討:GPSデータの追加に失敗した場合のエラーハンドリングを追加することをお勧めします。
|
||||
//
|
||||
double prevLat = 0.0; // 直前の位置
|
||||
double prevLon = 0.0;
|
||||
|
||||
void handleLocationUpdate(LocationMarkerPosition? position) async {
|
||||
try {
|
||||
//final DestinationController destinationController = Get.find<DestinationController>();
|
||||
//final signalStrength = locationController.getGpsSignalStrength();
|
||||
|
||||
okToUseGPS = false;
|
||||
double prevLat = currentLat; // 直前の位置
|
||||
double prevLon = currentLon;
|
||||
|
||||
if (position != null) {
|
||||
currentLat = position.latitude;
|
||||
currentLon = position.longitude;
|
||||
if( prevLat==0.0 ){
|
||||
prevLat = currentLat;
|
||||
prevLon = currentLon;
|
||||
}
|
||||
lastValidGPSLocation = LatLng(currentLat, currentLon);
|
||||
okToUseGPS = true;
|
||||
lastGPSDataReceivedTime = DateTime.now();
|
||||
@ -1316,7 +1379,8 @@ class DestinationController extends GetxController {
|
||||
Duration difference = lastGPSCollectedTime.difference(DateTime.now())
|
||||
.abs();
|
||||
// 最後にGPS信号を取得した時刻から10秒以上経過、かつ10m以上経過(普通に歩くスピード)
|
||||
if (difference.inSeconds >= 10 && distanceToDest >= 10) {
|
||||
//debugPrint("時間差:${difference.inSeconds}, 距離差:${distanceToDest}");
|
||||
if (difference.inSeconds >= 10 || distanceToDest >= 30) {
|
||||
// print(
|
||||
// "^^^^^^^^ GPS data collected ${DateFormat('kk:mm:ss \n EEE d MMM').format(DateTime.now())}, ^^^ ${position.latitude}, ${position.longitude}");
|
||||
|
||||
@ -1333,11 +1397,14 @@ class DestinationController extends GetxController {
|
||||
if (isInRog.value) {
|
||||
await addGPStoDB(position.latitude, position.longitude);
|
||||
lastGPSCollectedTime = DateTime.now();
|
||||
prevLat = position.latitude;
|
||||
prevLon = position.longitude;
|
||||
debugPrint("フロントエンドでのGPS保存(時間差:${difference.inSeconds}, 距離差:${distanceToDest}) : Time=${lastGPSCollectedTime}");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
debugPrint("Error: ${e}");
|
||||
debugPrint("handleLocationUpdate Error: ${e}");
|
||||
} finally {
|
||||
/* Akira , 2024-4-5
|
||||
if (position != null &&
|
||||
|
||||
Reference in New Issue
Block a user