मैं पृष्ठभूमि मोड में BLE उपकरणों को स्कैन करने के बारे में एक ऐप बना रहा हूं और हर मिनट सर्वर पर डिवाइस सूची भेजता हूं

private let uuid = CBUUID(string: "DEC18772-CCC0-462D-92FB-F5C823537895")

self.centralManager?.scanForPeripherals(withServices: [uuid], options: [CBCentralManagerScanOptionAllowDuplicatesKey : true])

प्लिस्ट फ़ाइल में

    <array>
        <string>bluetooth-central</string>
        <string>bluetooth-peripheral</string>
    </array>

मैं 60 सेकंड के बाद सर्वर पर डिवाइस सूची भेजने के लिए टाइमर का उपयोग करता हूं

var timer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)

लेकिन जब मैं ऐप को बैकग्राउंड मोड में बनाता हूं, तो सब कुछ रुका हुआ लगता है, टाइमर और किया गया डिस्कवर कॉल बैक काम नहीं करता है

क्या ऐप को बैकग्राउंड मोड में चलाने के लिए कुछ याद आ रहा है?

0
Nhu Nguyen 15 मार्च 2020, 05:23

1 उत्तर

सबसे बढ़िया उत्तर

आप जो करने की कोशिश कर रहे हैं उसके साथ आपको कुछ समस्याओं का सामना करना पड़ रहा है:

  1. Timer जब तक आपका ऐप निलंबित नहीं होता, तब तक आग नहीं लगती; एक विशिष्ट अवधि के साथ निष्पादन आईओएस पर समर्थित पृष्ठभूमि मोड नहीं है।
  2. आप बैकग्राउंड में स्कैन करते समय CBCentralManagerScanOptionAllowDuplicatesKey का उपयोग नहीं कर सकते।

चूंकि आपने अपनी Info.plist में ब्लूटूथ पृष्ठभूमि मोड में ऑप्ट इन किया है, यह मानते हुए कि उपयोगकर्ता ब्लूटूथ पृष्ठभूमि की अनुमति देता है, आपको एक didDiscover प्रतिनिधि कॉलबैक प्राप्त होगा जब भी कोई नया उपकरण देखा जाएगा। निर्दिष्ट सेवा का विज्ञापन कर रहा है (DEC18772-CCC0-462D-92FB-F5C823537895).

आप इस कॉलबैक में अपने सर्वर को इस डिवाइस की खोज की रिपोर्ट कर सकते हैं।

जब तक आपका ऐप बैकग्राउंड में रहेगा तब तक आपको उस डिवाइस के लिए कोई अतिरिक्त डेलिगेट डिस्कवरी कॉलबैक प्राप्त नहीं होगा।

1
Paulw11 15 मार्च 2020, 04:32