24

Ich benutze Core-Bluetooth Framework für meine App in Iphone-4s.
Dies ist in der Regel eine Hintergrund-App, die so lange wie möglich ausgeführt werden kann.Hintergrund Zeit Problem für Bluetooth LE App für Iphone 4s

Jetzt läuft es nur für 40 min - 1 Stunde max.

Ich hoffe für mindestens 1 Tag oder so.

Für diesen "Bluetooth-Central" -Wert wird in ".Plist-Datei" Schlüssel "Erforderliche Hintergrundmodi" hinzugefügt.

Es scheint, als ob meine App am Ende "Suspend" -Modus wird. Seit ich die App wieder öffne (Hintergrund in den Vordergrundzustand), wird die Benachrichtigung erneut gesendet, das heißt, die Bluetooth-Verbindung ist immer noch verbunden und das BLE-Gerät sendet immer noch eine Benachrichtigung. Wenn ich die Home-Taste drücke und die App im Hintergrund erscheint, wird sie NICHT erneut benachrichtigt.

Kann mir jemand sagen, warum meine App nur für maximal 1 Stunde im Hintergrundmodus läuft. Es sollte für immer wie normale Musik-App im Hintergrund weiterlaufen.

Gibt Apple etwas Spezifisches darüber aus, unter welcher Bedingung eine Hintergrund-App (welche eine dieser fortlaufenden Hintergrund-App ist, die in den 5 Kategorien fällt) fehlschlägt, welche in den Suspend-Modus versetzt wird?

"iPhoneAppProgrammingGuide", auf "Communicating with a Bluetooth Accessory" Abschnitt Bezug genommen, komme ich zu wissen, dass für diese Aufgabe langen Laufes Hintergrund für Bluetooth LE Anwendung 2-Implementierungen sind necessory:

1) UIBackgroundModes Taste „Bluetooth-central sein sollte "in Info.plist Datei. 2) Jede App, die die Hintergrundverarbeitung von Bluetooth-Daten unterstützt, muss sitzungsbasiert sein.

So für meine App wurde die FIRST-Implementierung integriert, und mit dieser Anwendung kann im Hintergrund ausgeführt werden und alle Aufgaben für maximal 1 Stunde dauern.

Jetzt muss ich die zweite Implementierung implementieren. d.h. sitzungsbasiert. Dies wird es ermöglichen, die Ereignisse zu erhalten, auch wenn sich die App gemäß der Dokumentation im Zustand "Suspend" befindet ( ). Ich habe versucht, eine geeignete Bluetooth LE spezifische Sitzung zu finden (Core Bluetooth Framework) wie die "EASession", die für Classic Bluetooth (External Accessory framework) vorhanden ist. Aber ich habe es nicht gefunden.

Grundsätzlich bin ich nicht sicher, welche Sitzungsklasse ich für BLE-Zwecke verwenden muss. Für Audio/Video, Netzwerk und Internet, externes Zubehör, stehen individuelle Sitzungsklassen zur Verfügung. Es gibt keine für Core Bluetooth Framework.

Könnte mir jemand helfen, welche Sitzungsklasse für BLE geeignet ist.

+0

Sie sollten so lange im Hintergrund laufen können, haben Sie das jemals funktioniert? –

+2

Ich sehe das Gleiche. Mein Peripheriegerät verliert möglicherweise für einige Minuten die Verbindung zum ios-Gerät, und wenn es wieder in Reichweite ist, wird es von der Hintergrund-App gefunden und fortgesetzt. Wenn die Verbindung jedoch stundenlang unterbrochen wird, versucht die Hintergrund-App nicht mehr, sich erneut zu verbinden. – Jonathan

+0

Wenn Sie drum herum hacken müssen, können Sie auch Hintergrund-Sound-Wiedergabe aktivieren und einen kurzen stillen Ton kontinuierlich ablaufen lassen, wenn die App in den Hintergrund tritt, und stoppen, wenn sie aktiv wird. –

Antwort

5

denke ich, das Problem einfach versuchen, ist, dass Sie info.plist wie mein Bildschirm zu implementieren:

enter image description here
Und wenn Sie möchten, dass Sie die Funktion auf AppDelegate.m unter dem didFinishLaunchingWithOptions hinzufügen können Bluetooth, AirPlay WiFi und mehr zu ermöglichen, Dies ist nur ein Beispielcode, aber ich denke, kann Ihnen helfen.

NSError *sessionError = nil; 
[[AVAudioSession sharedInstance] setDelegate:self]; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; 
[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); 

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

Hoffe, das kann Ihnen helfen.

Verwandte Themen