Files
rog_app/ios_setup/Runner/AppDelegate.swift
2024-09-08 18:16:51 +09:00

107 lines
4.0 KiB
Swift
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Flutter
import UIKit
import CoreMotion
@main
@objc class AppDelegate: FlutterAppDelegate {
private let motionManager = CMMotionManager()
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
//GeneratedPluginRegistrant.register(with: self)
//return super.application(application, didFinishLaunchingWithOptions: launchOptions)
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
let motionChannel = FlutterMethodChannel(name: "net.sumasen.gifunavi/motion",
binaryMessenger: controller.binaryMessenger)
motionChannel.setMethodCallHandler({
[weak self] (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
guard let self = self else { return }
switch call.method {
case "startMotionUpdates":
self.startMotionUpdates(result: result)
case "stopMotionUpdates":
self.stopMotionUpdates(result: result)
default:
result(FlutterMethodNotImplemented)
}
})
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
//
// 姿
//
// sendMotionData使Flutter
private func startMotionUpdates(result: @escaping FlutterResult) {
if motionManager.isDeviceMotionAvailable {
motionManager.deviceMotionUpdateInterval = 0.1
motionManager.startDeviceMotionUpdates(to: .main) { (motion, error) in
guard let self = self else { return }
if let error = error {
DispatchQueue.main.async {
result(FlutterError(code: "MOTION_ERROR",
message: error.localizedDescription,
details: nil))
}
return
}
guard let motion = motion else {
DispatchQueue.main.async {
result(FlutterError(code: "NO_MOTION_DATA",
message: "No motion data available",
details: nil))
}
return
}
DispatchQueue.main.async {
let motionData: [String: Any] = [
"attitude": [
"roll": motion.attitude.roll,
"pitch": motion.attitude.pitch,
"yaw": motion.attitude.yaw
],
"gravity": [
"x": motion.gravity.x,
"y": motion.gravity.y,
"z": motion.gravity.z
],
"userAcceleration": [
"x": motion.userAcceleration.x,
"y": motion.userAcceleration.y,
"z": motion.userAcceleration.z
]
]
self.sendMotionData(motionData)
}
}
result(nil) //
} else {
result(FlutterError(code: "UNAVAILABLE",
message: "Device motion is not available.",
details: nil))
}
}
private func sendMotionData(_ data: [String: Any]) {
let motionChannel = FlutterMethodChannel(name: "net.sumasen.gifunavi/motion",
 binaryMessenger: (window?.rootViewController as! FlutterViewController).binaryMessenger)
motionChannel.invokeMethod("onMotionData", arguments: data)
}
private func stopMotionUpdates(result: @escaping FlutterResult) {
motionManager.stopDeviceMotionUpdates()
result(nil)
}
}