経緯
- アプリを使用しGPSを利用するとバッテリーがかなり消耗します
- Apple Watchからは、GPSを単独で停止することができませんが、iPhoneの「Watch」アプリから手動で停止することができます。(どなたか、Swiftで出来る方法があれば、教えてください)
弱手手法
- AppleWatch側
- GPSブイが止まっている時は
-
- 表示されるボタンと押すと、iPhoneでオンして下さいとメッセージを出す
メッセージ(変更:20240509→
- 表示されるボタンと押すと、iPhoneでオンして下さいとメッセージを出す
-
- OKアラートを記載
- 全てのボタンに位置情報サービスを開始できるか確認し、場合によりアラートを表示させる
-
Button(action: {
// No.2 GPSブイを登録する際、GPS情報入手不可能な時、isShowAlertでアラート発生
// manager.reloadRegion(bouyNo: 2)
if false == manager.reloadRegion(bouyNo: 2){
isShowAlert.toggle()
}
}) {
Image(systemName: "mappin.circle.fill")
.foregroundColor(.white)
.font(.system(size: 12))
Text("3")
.foregroundColor(.white)
.font(.system(size: 12))
}
.frame(width: 41, height: 23)
.cornerRadius(30.0)
//OkAlertを記載
.alert("Error", isPresented: $isShowAlert) {
// ダイアログ内で行うアクション処理...
} message: {
// アラートのメッセージ...
Text("アプリの位置情報サービスを\niPhoneから\nオンにして下さい")
}
-
GPS情報入手可否確認
-
//位置情報サービスがデバイス上で有効になっているか?
if CLLocationManager.locationServicesEnabled() {
let status = manager.authorizationStatus
switch status {
case .authorizedAlways, .authorizedWhenInUse:
//ユーザーは、アプリがいつでも位置情報サービスを開始することを許可している
//ユーザーは、アプリの使用中に位置情報サービスを開始することを許可した
//この時は
//ユーザーの現在位置を報告するアップデートの生成を開始
manager.startUpdatingLocation()
case .notDetermined:
//アプリの使用中に位置情報サービスを使用する許可をユーザーに要求
manager.requestWhenInUseAuthorization()
case .denied:
//ユーザーがアプリの位置情報サービスの使用を拒否しているので、アラートで知らせ
return false
case .restricted:
//このアプリは位置情報サービスを使用する権限がない
break
default:
break
}
}else {
//ユーザーがアプリの位置情報サービスの使用を拒否しているので、アラートで知らせる
return false
}
return true
- OKアラートを記載
-
- プライバシーを選択
-
- 「”設定”の”プライバシー”」(オレンジ文字)を選択
-
- 位置情報サービスを選択
- gpsBuoyを選択
-
- GPSを切る時は「しない」
-
- GPSを使う時は「このアプリの使用中」を選択
ここまで見てください、ありがとうございます