iOS GPS 設定によるポップアップ、バックグラウンド処理修正。Android は未確認

This commit is contained in:
2024-05-02 11:51:52 +09:00
parent 9d8f1ef31a
commit 7a97127a19
13 changed files with 515 additions and 52 deletions

View File

@ -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 &&