Apple Watch stops transmitting gyroscope/accelometer data after a few minutes for unknown reason

Viewed 13

I have created a watchOS app that fetches data from the accelerometer and gyroscope and sends it to a socket server. The server just prints the data on the console. The socket server is made in python. My app works fine for a few minutes but then stops working.

I tested by creating an iPhone app and it's working fine. The problem is with the apple watch app. Can someone help me with this? I don't understand what's going on.

server.py

    import socket


localIP = ""

localPort = 20001

bufferSize = 10240


msgFromServer = "Hello UDP Client"

bytesToSend = str.encode(msgFromServer)


# Create a datagram socket

UDPServerSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)


# Bind to address and ip

UDPServerSocket.bind((localIP, localPort))


print("UDP server up and listening")


# Listen for incoming datagrams

while(True):

    bytesAddressPair = UDPServerSocket.recvfrom(bufferSize)

    message = bytesAddressPair[0]

    address = bytesAddressPair[1]

    clientMsg = "Message from Client:{}".format(message)
    clientIP = "Client IP Address:{}".format(address)

    print(clientMsg)
    print(clientIP)

    # Sending a reply to client

    UDPServerSocket.sendto(bytesToSend, address)

InterfaceController.swift

 @IBOutlet weak var stopButton: WKInterfaceButton!
    @IBOutlet weak var startButton: WKInterfaceButton!
    
    
    var session = WKExtendedRuntimeSession()
    
    private var host: NWEndpoint.Host = "172.16.105.162"
    private var port: NWEndpoint.Port = 20001
    private var updateTimeInterval: Double = 1/60
    
    
    override func awake(withContext context: Any?) {
        // Configure interface objects here.
        
         //        startButton.setHidden(false)
        startButton.setEnabled(true) // //        stopButton.setHidden(true)
        stopButton.setEnabled(false)
        
                
        setUPSession()
    }
    
    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        print("ACTIVATE")
    }
    
    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        print("DEACTIVATE")
    }
    
    @IBAction func actionStop() { //        startButton.setHidden(false)
        startButton.setEnabled(true) // //        stopButton.setHidden(true)
        stopButton.setEnabled(false)
        
        self.stopSession()
        
       // MotionDatafetcher.shared.startSession() //stopWorkoutSEssion() //stopFetch()
    }
    
    
    @IBAction func actionStart() { //        startButton.setHidden(true)
        startButton.setEnabled(false) // //        stopButton.setHidden(false)
        stopButton.setEnabled(true)
        
        self.startSession()
        
       // MotionDatafetcher.shared.startFetch()
        
        //MotionDatafetcher.shared.stopSession() //startWorkoutSession() //startDeviceMotionFetch()
    }
     }


extension InterfaceController : WKExtendedRuntimeSessionDelegate{
    func setUPSession() {
        // Create the session object.
        session = WKExtendedRuntimeSession()

        // Assign the delegate.
        session.delegate = self
        
        MySocketManager.shared.setUpConn()
    }
    
    func startSession() {
        session.start()
        MySocketManager.shared.connectToUDP(host, port)
        MotionDatafetcher.shared.startDeviceMotionFetch(updateTimeInterval)
    }
    
    func stopSession() {
        session.invalidate()
        MotionDatafetcher.shared.stopFetch()
        MySocketManager.shared.cancelConnToUDP()
    }
    
    func extendedRuntimeSession(_ extendedRuntimeSession: WKExtendedRuntimeSession, didInvalidateWith reason: WKExtendedRuntimeSessionInvalidationReason, error: Error?) {
        
    }
    
    func extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
        
    }
    
    func extendedRuntimeSessionWillExpire(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
        self.stopSession()
    }
     }
0 Answers
Related