Как не допустить, чтобы приложение Apple Watch перешло в фоновый режим swiftui? - PullRequest
0 голосов
/ 14 апреля 2020

Я работаю над обучающим приложением, в котором начальная сессия должна держать приложение в фокусе. Приблизительно после 5 минут не поднимая мое запястье, это уходит в фон, и часы показывают стандартное осложнение. Приложение все еще работает, но я должен найти его в «доке»

Есть идеи, как предотвратить потерю фокуса приложением во время сеанса? Мне не нужно, чтобы экран был включен, но мне нужно приложение, чтобы показывать статистику / кнопки всякий раз, когда я поднимаю запястье. Я обнаружил applicationWillResignActive(), но, похоже, он не имеет никаких функций для предотвращения этого.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Благодаря Винсенту я нашел правильные документы для яблок для этого.

Получил это для работы с представлением SwiftUI, поместив его в WKHostingController. Как видно, я только что внедрил эту HKWorkoutSession в представление SwiftUI. Затем я запускаю и останавливаю изнутри это представление onAppear и onDissapear. Просто отправлять сообщения, если кто-то еще пытается найти решение. Осторожно, ниже просто концепция.

https://developer.apple.com/documentation/healthkit/hkhealthstore

class ExerciseInterfaceController: WKHostingController<Plank>  {
var ed = (WKExtension.shared().delegate as! ExtensionDelegate)
let ws: HKWorkoutSession
override init() {

    let hs = HKHealthStore()
           let cnf = HKWorkoutConfiguration()
            cnf.activityType = .mindAndBody. //just for debugging
            cnf.locationType = .indoor 

           do {
               ws = try HKWorkoutSession(healthStore: hs, configuration: cnf)
           } catch {
              fatalError(error.localizedDescription)
           }

}
override var body: Plank {
    return Plank(workoutsession: ws)
}
1 голос
/ 14 апреля 2020

Я думаю, что вам нужно использовать расширенные сеансы во время выполнения, которые, я думаю, были введены в watchOS 6.

Расширенные сеансы во время выполнения требуют, чтобы вы специально указали тип вашего сеанса, что, как я думаю, в вашем случае квалифицироваться как «Физиотерапия». Вы должны выбрать в разделе фоновых режимов настроек вашего проекта

Тем не менее, поскольку я не знаю, для какой деятельности будет использоваться приложение, оно также может не подходить, если действие считается напряженным. В этом случае обратите внимание на HKWorkoutSession, который, как мне кажется, рассматривает тренировку как приложение для тренировок по умолчанию, но я не уверен, что вы этого хотите.

Если вы хотите использовать Для расширенных сеансов во время выполнения вы можете:

  1. Инициализировать сеанс как WKExtendedRuntimeSession()
  2. Назначить делегата сеанса (WKExtendedRuntimeSessionDelegate)
  3. Использовать функции делегата, такие как extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession), чтобы иметь дело с активным сеансом.

Не забудьте session.start, чтобы начать сеанс, когда это необходимо.

Вот некоторая информация, которая может помочь в дальнейшем: https://developer.apple.com/documentation/watchkit/using_extended_runtime_sessions

...