L'exécution de l'Application iOS en arrière-plan pendant plus de 10 minutes
Je suis en train de permettre à mon application de s'exécuter en arrière-plan pendant plus de 10 minutes, en fonction de cela et mon bon ci-dessous. (Je veux l'utiliser à long exécution en arrière-plan pour garder une trace de l'emplacement, mon code ici, il suffit juste d'utiliser un compteur pour des fins de test)
N'importe qui peut aider à préciser quel est le problème?
La Mise En Œuvre À Long Exécution De Tâches De Fond
Pour les tâches qui nécessitent plus de temps d'exécution à mettre en œuvre, vous devez
demande des autorisations spécifiques à exécuter en tâche de fond sans
leur suspension. Dans iOS, seulement l'application spécifique types sont autorisés à
exécuter en arrière-plan:Les applications qui lisent le contenu audible à l'utilisateur, alors que dans le fond,
comme un lecteur de musique appApps qui permettent aux utilisateurs de rester informés de leur emplacement à tout moment, comme
une application de navigationApplications qui prennent en charge la Voix sur Protocole Internet (VoIP)
Kiosque à journaux des applications qui ont besoin de télécharger et traiter le contenu des Applications qui
recevoir des mises à jour régulières des accessoires externesApplications qui mettent en œuvre ces services doivent déclarer les services qu'ils
l'utilisation et le soutien du système des cadres pour mettre en œuvre les aspects pertinents de la
ces services. Déclarer les services permet au système de savoir qui
les services que vous utilisez, mais dans certains cas c'est le système de cadres
effectivement empêcher votre application à partir de la suspension.
- (void)viewDidLoad {
[super viewDidLoad];
counterTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
}];
count=0;
theTimer=[NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(countUp)
userInfo:nil
repeats:YES];
}
- (void)countUp {
{
count++;
NSString *currentCount;
currentCount=[[NSString alloc] initWithFormat:@"%ld",count];
theCount.text=currentCount;
[currentCount release];
}
}
Une autre Question: puis-je avoir une Application iOS exécuter en arrière-plan pour toujours?
----Modifié le code pour ajouter un emplacement, ne marche pas encore fonctionner plus de 10 minutes, toute aide à ce que je fais mal?
- (void)viewDidLoad {
[super viewDidLoad];
count=0;
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
counterTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
//If you're worried about exceeding 10 minutes, handle it here
[locationManager startUpdatingLocation];
}];
theTimer=[NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(countUp)
userInfo:nil
repeats:YES];
}
(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
NSLog(@"OldLocation %f %f", oldLocation.coordinate.latitude, oldLocation.coordinate.longitude); NSLog(@"NewLocation %f %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
count++; NSString *currentCount;
currentCount=[[NSString alloc] initWithFormat:@"%ld",count];
theCount.text=currentCount; [currentCount release];
}
(void)countUp { [locationManager startUpdatingLocation];
{ count++; NSString *currentCount;
currentCount=[[NSString alloc] initWithFormat:@"%ld",count];
theCount.text=currentCount;
[currentCount release]; } }
il ne tombent dans les catégories décrites en particulier les Applications qui permettent aux utilisateurs de rester informés de leur emplacement à tout moment, comme une application de navigation) quand j'ai tester le code tâches en arrière-plan séjour pour seulement 10 minutes, devrais-je utiliser l'emplacement pour le test au lieu de simplement le compteur?
Si vous app, l'emplacement dans le fond, vous devriez commencer à
CLLocationManager
pour accueillir de grands changements. Ensuite, votre application sera informé lorsque l'utilisateur change d'emplacement.Merci, vais le tester maintenant, et vous dire ce qui se passe
rckoenes, j'ai édité la question avec le nouveau code, qui comprend la cllocation, merci de toute aide à ce que je fais de mal, merci
OriginalL'auteur Ahmad | 2013-04-16
Vous devez vous connecter pour publier un commentaire.
Si votre application utilise les services de localisation. Alors s'il vous plaît lire le Les Services De Géolocalisation Guide De Programmation.
Vous avez besoin de faire quelques modifications à vos informations.plist:
location-services
àUIRequiredDeviceCapabilities
gps
àUIRequiredDeviceCapabilities
location
àUIBackgroundModes
. Ensuite, votre emplacement gestionnaire de livrer des lieux au-delà de 10 minutes-limite.NSLocationUsageDescription
(peut également être localisées)Merci beaucoup, le problème est résolu 😀
reportez-vous à cette réponse stackoverflow.com/a/12582916/550177
OriginalL'auteur Felix
Voir phix23's réponse (et la documentation) pour plus de détails, mais ici, je veux expliquer ce que vous pouvez attendre.
C'est tous un peu dans la documentation que vous avez cité.
Toute application peut s'exécuter en arrière-plan pour un maximum de dix minutes. C'est ce que l'
beginBackgroundTaskWithExpirationHandler:
méthode. N'importe lequel des drapeaux et des options que vous définissez, vous obtiendrez l'aide de cette méthode.Pour les applications qui ont besoin de garder une trace de l'emplacement, vous pouvez utiliser
CLLocationManager
. Ce n'est pas de permettre à votre application de s'exécuter en arrière-plan, aussi longtemps que vous le souhaitez. Au lieu de cela, il vous avertit lorsque quelque chose d'intéressant qui se passe -- c'est ce que le délégué est pour. Si vous ne pouvez pas garantir que votrecountUp
méthode est appelée toutes les dix minutes, mais vous peut ont OS de l'appeler quand l'utilisateur déplace son combiné à une certaine distance.OriginalL'auteur Stephen Darlington
Par adjonction, dans la
applicationDidEnterBackground
méthode, il semble qu'il peut exécuter à jamais:Alors vous invalider le long de la tâche dans la
willEnterForeground
.- Je réussir dans iOS 6 récemment, mais je ne suis pas sûr qu'il pourrait être approuvé pour le magasin.
OriginalL'auteur passol
Par la façon dont, dans votre plist vous pouvez alos ensemble
Required background modes
puis dans Item0App registers for location updates
OriginalL'auteur lvp