Compare commits
2 Commits
02e463d3ec
...
74f6a79a36
| Author | SHA1 | Date | |
|---|---|---|---|
| 74f6a79a36 | |||
| e70d3fd012 |
@ -65,6 +65,26 @@ class LocationService : Service() {
|
|||||||
|
|
||||||
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
|
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
|
||||||
|
|
||||||
|
// 位置情報の権限チェックとGPS有効化の確認を行う
|
||||||
|
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||||
|
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
|
||||||
|
val locationRequest = LocationRequest.create().apply {
|
||||||
|
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
|
||||||
|
interval = 10000
|
||||||
|
fastestInterval = 5000
|
||||||
|
}
|
||||||
|
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null)
|
||||||
|
} else {
|
||||||
|
Log.d("LocationService", "GPS is disabled.")
|
||||||
|
// GPSが無効の場合の処理を追加する(例: ユーザーにGPSを有効にするように促すなど)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log.d("LocationService", "Location permission is not granted.")
|
||||||
|
// 位置情報の権限が許可されていない場合の処理を追加する
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
// GPSデバイスが有効になっているか確認する
|
// GPSデバイスが有効になっているか確認する
|
||||||
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||||
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
|
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
|
||||||
@ -73,6 +93,7 @@ class LocationService : Service() {
|
|||||||
}else{
|
}else{
|
||||||
Log.d("LocationService", "GPS is enabled.")
|
Log.d("LocationService", "GPS is enabled.")
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// フォアグラウンドサービスの設定
|
// フォアグラウンドサービスの設定
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
@ -185,6 +206,7 @@ class LocationService : Service() {
|
|||||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||||
Log.d("LocationService", "Android: onStartCommand.")
|
Log.d("LocationService", "Android: onStartCommand.")
|
||||||
|
|
||||||
|
/* onCreate でやってるので除外。
|
||||||
// 位置情報の権限チェックとGPS有効化の確認を行う
|
// 位置情報の権限チェックとGPS有効化の確認を行う
|
||||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
||||||
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||||
@ -204,6 +226,8 @@ class LocationService : Service() {
|
|||||||
// 位置情報の権限が許可されていない場合の処理を追加する
|
// 位置情報の権限が許可されていない場合の処理を追加する
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// Foregroundサービスを開始
|
// Foregroundサービスを開始
|
||||||
startForeground(NOTIFICATION_ID, createNotification())
|
startForeground(NOTIFICATION_ID, createNotification())
|
||||||
|
|
||||||
|
|||||||
@ -93,6 +93,7 @@ class MainActivity: FlutterActivity() {
|
|||||||
} else {
|
} else {
|
||||||
Log.d("MainActivity", "Location permission is not granted.")
|
Log.d("MainActivity", "Location permission is not granted.")
|
||||||
// 位置情報の権限が許可されていない場合の処理を追加する
|
// 位置情報の権限が許可されていない場合の処理を追加する
|
||||||
|
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), PERMISSION_REQUEST_CODE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -396,11 +396,11 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 467;
|
CURRENT_PROJECT_VERSION = 469;
|
||||||
DEVELOPMENT_TEAM = UMNEWT25JR;
|
DEVELOPMENT_TEAM = UMNEWT25JR;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FLUTTER_BUILD_NAME = 4.5.2;
|
FLUTTER_BUILD_NAME = 4.5.3;
|
||||||
FLUTTER_BUILD_NUMBER = 467;
|
FLUTTER_BUILD_NUMBER = 469;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
|
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
|
||||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
|
||||||
@ -409,7 +409,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.5.2;
|
MARKETING_VERSION = 4.5.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
|
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@ -537,11 +537,11 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 467;
|
CURRENT_PROJECT_VERSION = 469;
|
||||||
DEVELOPMENT_TEAM = UMNEWT25JR;
|
DEVELOPMENT_TEAM = UMNEWT25JR;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FLUTTER_BUILD_NAME = 4.5.2;
|
FLUTTER_BUILD_NAME = 4.5.3;
|
||||||
FLUTTER_BUILD_NUMBER = 467;
|
FLUTTER_BUILD_NUMBER = 469;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
|
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
|
||||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
|
||||||
@ -550,7 +550,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.5.2;
|
MARKETING_VERSION = 4.5.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
|
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@ -569,11 +569,11 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 467;
|
CURRENT_PROJECT_VERSION = 469;
|
||||||
DEVELOPMENT_TEAM = UMNEWT25JR;
|
DEVELOPMENT_TEAM = UMNEWT25JR;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FLUTTER_BUILD_NAME = 4.5.2;
|
FLUTTER_BUILD_NAME = 4.5.3;
|
||||||
FLUTTER_BUILD_NUMBER = 467;
|
FLUTTER_BUILD_NUMBER = 469;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
|
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
|
||||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
|
||||||
@ -582,7 +582,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 4.5.2;
|
MARKETING_VERSION = 4.5.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
|
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|||||||
@ -20,7 +20,7 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|||||||
import '../../main.dart';
|
import '../../main.dart';
|
||||||
|
|
||||||
|
|
||||||
class IndexController extends GetxController {
|
class IndexController extends GetxController with WidgetsBindingObserver {
|
||||||
List<GeoJSONFeatureCollection> locations = <GeoJSONFeatureCollection>[].obs;
|
List<GeoJSONFeatureCollection> locations = <GeoJSONFeatureCollection>[].obs;
|
||||||
List<GeoJSONFeature> currentFeature = <GeoJSONFeature>[].obs;
|
List<GeoJSONFeature> currentFeature = <GeoJSONFeature>[].obs;
|
||||||
List<Destination> currentDestinationFeature = <Destination>[].obs;
|
List<Destination> currentDestinationFeature = <Destination>[].obs;
|
||||||
@ -183,6 +183,9 @@ class IndexController extends GetxController {
|
|||||||
_connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
|
_connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
|
||||||
|
WidgetsBinding.instance?.addObserver(this);
|
||||||
|
_startLocationService(); // アプリ起動時にLocationServiceを開始する
|
||||||
|
|
||||||
print('IndexController onInit called'); // デバッグ用の出力を追加
|
print('IndexController onInit called'); // デバッグ用の出力を追加
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -196,9 +199,48 @@ class IndexController extends GetxController {
|
|||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_connectivitySubscription.cancel();
|
_connectivitySubscription.cancel();
|
||||||
|
WidgetsBinding.instance?.removeObserver(this);
|
||||||
|
_stopLocationService(); // アプリ終了時にLocationServiceを停止する
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||||
|
|
||||||
|
if (state == AppLifecycleState.resumed) {
|
||||||
|
if (!_isLocationServiceRunning()) {
|
||||||
|
_startLocationService();
|
||||||
|
}
|
||||||
|
} else if (state == AppLifecycleState.paused) {
|
||||||
|
_stopLocationService();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _isLocationServiceRunning() {
|
||||||
|
// LocationServiceが実行中かどうかを確認する処理を実装する
|
||||||
|
// 例えば、SharedPreferencesにサービスの状態を保存するなど
|
||||||
|
// ここでは簡単のために、常にfalseを返すようにしています
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _startLocationService() async {
|
||||||
|
const platform = MethodChannel('location');
|
||||||
|
try {
|
||||||
|
await platform.invokeMethod('startLocationService');
|
||||||
|
} on PlatformException catch (e) {
|
||||||
|
print("Failed to start location service: '${e.message}'.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _stopLocationService() async {
|
||||||
|
const platform = MethodChannel('location');
|
||||||
|
try {
|
||||||
|
await platform.invokeMethod('stopLocationService');
|
||||||
|
} on PlatformException catch (e) {
|
||||||
|
print("Failed to stop location service: '${e.message}'.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@override
|
@override
|
||||||
void onReady() async {
|
void onReady() async {
|
||||||
|
|||||||
@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
|||||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
version: 1.0.36+36
|
version: 4.5.3+469
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.1.0 <4.0.0"
|
sdk: ">=3.1.0 <4.0.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user