मैं पृष्ठभूमि स्थिति में प्रवेश करते समय 10 मिनट से अधिक समय तक आईओएस ऐप को सक्रिय स्थिति में रखने की कोशिश कर रहा हूं।पृष्ठभूमि में 10 मिनट से अधिक समय के लिए ऐप चलाएं
मैं इसे कैसे कार्यान्वित कर सकता हूं।
मैं पृष्ठभूमि स्थिति में प्रवेश करते समय 10 मिनट से अधिक समय तक आईओएस ऐप को सक्रिय स्थिति में रखने की कोशिश कर रहा हूं।पृष्ठभूमि में 10 मिनट से अधिक समय के लिए ऐप चलाएं
मैं इसे कैसे कार्यान्वित कर सकता हूं।
iPhoneAppProgrammingGuide के "पृष्ठभूमि निष्पादन" अनुभाग देखें। संक्षेप में, अपने अनुप्रयोग इन प्रकारों में से एक होना चाहिए:
और इस प्रकार आप Info.plist को जोड़ना होगा: अपने Info.plist फ़ाइल के लिए UIBackgroundModes कुंजी जोड़ें और एक सरणी में एक या अधिक निम्न तार की युक्त करने के लिए अपने मूल्य सेट करें:
नोट समीक्षा प्रक्रिया का वह हिस्सा अपने अनुप्रयोग है कि सुनिश्चित करने के लिए जाँच की जाएगी की जरूरत है कि साथ काम करता है यह करता है कि यह पृष्ठभूमि प्रसंस्करण के संबंध में क्या कर रहा है।
ध्यान दें कि इन प्रकारों को सेट करने से ऐप को जीवित नहीं रखा जाएगा। उदाहरण के लिए: जब आप ऑडियो खेल रहे हों, तो यह संगीत के दौरान जीवित रहेगा। लेकिन जब आपका गीत समाप्त होता है, तो ऐप को अभी भी निलंबित कर दिया जा सकता है। – Jelle
अगर मैं एक अलार्म चलाने के लिए चाहता हूं, अधिसूचना प्राप्त हो जाने के बाद, जब मैं पृष्ठभूमि में होता हूं, तो मैं संगीत कैसे चला सकता हूं ?? इस बार अवधि 1 घंटे –
@ श्री जी हो सकती है: आपको अभी तक आपकी समस्या का समाधान मिला है? –
पृष्ठभूमि में केवल कुछ प्रकार के ऐप्स चलाने की अनुमति है। this guide के "लंबे समय तक चलने वाले पृष्ठभूमि कार्य" अनुभाग को देखें।
यदि आप पृष्ठभूमि प्रसंस्करण करने की अनुमति का अनुरोध नहीं कर रहे हैं तो आप यूआईपीप्लिकेशंस के beginBackgroundTaskWithExpirationHandler का उपयोग कर सकते हैं लेकिन आपको अतिरिक्त समय नहीं मिल सकता है।
नहीं मिला। कृपया अद्यतन करें। –
आप नहीं कर सकते। जब तक आपका ऐप ऑडियो, वीओआईपी या जीपीएस का उपयोग न करे। आप क्या कर सकते हैं उपयोगकर्ता को सूचित करें (स्थानीय अधिसूचनाओं के माध्यम से) कि समय लगभग ऊपर है और उसे ऐप खोलने/बंद करने के लिए कहें।
यदि आपको केवल उपयोगकर्ता को सूचित करने की आवश्यकता है, तो आप पुश नोटिफिकेशन का उपयोग कर सकते हैं।
यहां मैंने beginBackgroundTaskWithExpirationHandler का उपयोग करके किया है।
NStimer
के चयनकर्ता आग लगने के बाद, पृष्ठभूमि कार्य समाप्त करें और फिर उस विधि को तुरंत कॉल करें जिसे आपने पहले एक और पृष्ठभूमि कार्य शुरू करने के लिए लिखा था।यह समाधान वास्तव में आदर्श नहीं है और अभी भी भूख लगी है लेकिन आप जो चाहते हैं वह करेंगे।
संपादित करें: आईओएस 7 के बाद से, मेरा सुझाव है कि आप यह excellent post पढ़ लें।
क्या ऐप्पल ने ऐप स्टोर के लिए इस ऐप को मंजूरी दी थी? – Hope4You
हां। मुझे नहीं पता कि इससे मदद मिली है, लेकिन मैंने इसे "पावर सेवर" मोड के रूप में रिलीज़ किया है, जो कि पहले से ही था, जो कि ऐप को पृष्ठभूमि में जीवंत रखने के लिए हर समय जीपीएस चलाता था, लेकिन उपयोगकर्ता अब चुन सकता है। इस वजह से मैंने अभी भी "जीपीएस नाटकीय रूप से बैटरी जीवन को कम कर सकते हैं" संदेश रखा है जो वे आपको प्रकट करते हैं। –
मैं मूल रूप से ऐप को जीवित रखने के लिए जीपीएस का उपयोग करने जा रहा था, लेकिन यह विधि मेरे लिए बेहतर है, क्योंकि तब मुझे व्यक्ति के स्थान का उपयोग करने के लिए पूछना नहीं है। अपने परिदृश्य को समझाने के लिए बहुत बहुत धन्यवाद। – Hope4You
यह कोड पृष्ठभूमि में आपके आईओएस ऐप को अनिश्चित काल तक चलाता है। नीचे दिए गए तरीकों को एक सिंगलटन/मैनेजर में कॉपी और पेस्ट करें जो पृष्ठभूमि में प्रदर्शन करने के लिए आवश्यक कार्यों को संभालती है।
// @interface
// Declare Private property
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
//@end
// ...
// Copy into
//@implementation
- (void)setupBackgrounding {
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(appBackgrounding:)
name: UIApplicationDidEnterBackgroundNotification
object: nil];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(appForegrounding:)
name: UIApplicationWillEnterForegroundNotification
object: nil];
}
- (void)appBackgrounding: (NSNotification *)notification {
[self keepAlive];
}
- (void) keepAlive {
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
[self keepAlive];
}];
}
- (void)appForegrounding: (NSNotification *)notification {
if (self.backgroundTask != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}
}
https://github.com/yarodevuci/backgroundTask यहाँ मेरी कोड की जाँच करें मैं ऑडियो प्लेयर है कि लगभग 10 24 घंटे में% अवधि का उपयोग कैसे करें पूरी तरह से आईओएस 8 बैटरी उपयोग पर काम करता है खाली wav फ़ाइल निभाता उपयोग कर रहा हूँ:
var backgroundTask = BackgroundTask()
backgroundTask.startBackgroundTask() //Starts playing blank audio file. You can run NSTimer() or whatever you need and it will continue executing in the background.
backgroundTask.stopBackgroundTask() //Stops the task
चेतावनी: यदि आप इसे सबमिट करने का प्रयास करते हैं तो ऐप्पल इसे अस्वीकार कर देगा!
यदि आपका ऐप प्रकार वीओआइपी/ऑडियो/स्थान में से एक .... (जाँच Background Modes) नहीं है,
या आप एक पृष्ठभूमि अनुप्रयोग के रूप में अपने अनुप्रयोग निर्दिष्ट करने के लिए नहीं करना चाहते हैं, तो आप beginBackgroundTaskWithName लागू कर सकते हैं : समाप्ति हैंडलर या स्टार्टबैकग्राउंड टास्कविथ एक्सपेरेशन हैंडलर पृष्ठभूमि में अपनी प्रक्रिया को चलाने के लिए और अधिक समय मांगने के लिए। तुम्हें पता है, विस्तृत वर्णन here
Apps moving to the background are expected to put themselves into a quiescent state as quickly as possible so that they can be suspended by the system. If your app is in the middle of a task and needs a little extra time to complete that task, it can call the beginBackgroundTaskWithName:expirationHandler: or beginBackgroundTaskWithExpirationHandler: method of the UIApplication object to request some additional execution time. Calling either of these methods delays the suspension of your app temporarily, giving it a little extra time to finish its work. Upon completion of that work, your app must call the endBackgroundTask: method to let the system know that it is finished and can be suspended.
Each call to the beginBackgroundTaskWithName:expirationHandler: or beginBackgroundTaskWithExpirationHandler: method generates a unique token to associate with the corresponding task. When your app completes a task, it must call the endBackgroundTask: method with the corresponding token to let the system know that the task is complete. Failure to call the endBackgroundTask: method for a background task will result in the termination of your app. If you provided an expiration handler when starting the task, the system calls that handler and gives you one last chance to end the task and avoid termination.
मार्च 2018 की स्थिति के अनुसार, IOS 11.x पा सकते हैं वहाँ एक तरह से है कि मैं के बारे में पता विशेष प्रकार से एक होने के बिना अपने एप्लिकेशन पृष्ठभूमि में चल रहा रखने के लिए है। चाल, कि न दें NSURLSession द्वारा भूखा प्रतिनिधि कॉलबैक में एक नया DownloadTask बनाने
तो, रखने के अपने आवेदन को अनिश्चित काल चल रहा
एक पृष्ठभूमि NSURLSession बनाने रखने के लिए है
एक डमी डाउनलोड कार्य (डेटाटास्क नहीं), जिसमें http://localhost:12345/dummy.bin
लागू करें [- (शून्य) URL सत्र: (NSURL सत्र *) सत्र कार्य :(NSURLSessionTask *) कार्य किया गया पूर्णत: त्रुटि: (NSError *) त्रुटि] प्रतिनिधि और प्रतिनिधि में, एक और डमी डाउनलोड कार्य बनाएं और इसे [पुन: शुरू करें] से शुरू करें, अधिमानतः देरी के साथ।
आपको अभी भी तैयार रहना चाहिए कि ऐप सिस्टम द्वारा समाप्त कर दिया जाएगा।हालांकि, अगर ऐप को सिस्टम द्वारा समाप्त कर दिया गया था, इसे बाद में पृष्ठभूमि डाउनलोड कार्य पूर्ण करने के लिए पृष्ठभूमि मोड में फिर से शुरू किया जाना चाहिए। आपको को अपने ऐप प्रतिनिधि में विशेष रखें जिंदा NSURL सत्र शुरू करने की आवश्यकता है।
नमूना कोड:
/* Author: Yi Wang @InstaTV */
@interface URLSessionKeepAlive() {
NSURLSession *_session;
}
@end
@implementation URLSessionKeepAlive
- (instancetype)init {
self = [super init];
return self;
}
- (void)start {
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"SpecialKeepAliveIdentifier"];
[sessionConfiguration setAllowsCellularAccess:YES];
sessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;
sessionConfiguration.timeoutIntervalForRequest = 3.0;
sessionConfiguration.timeoutIntervalForResource = 3.0;
sessionConfiguration.URLCache = nil;
_session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil];
[self addTask];
}
- (void)addTask {
NSURLSessionTask *task = [_session downloadTaskWithURL:[NSURL URLWithString:@"http://localhost:12345/dummy.bin"]];
[task resume];
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
static NSInteger counter = 0;
if (error) {
NSLog(@"(%zd) Adding Keep Alive Task with error: '%@'", counter++, error);
[NSThread sleepForTimeInterval:3.0];
[self addTask];
}
}
के संभावित डुप्लिकेट [iOS4 पृष्ठभूमि टाइमर बनाएं] (http://stackoverflow.com/questions/4154332/ios4-create-background-timer) –
@ RichardJ.RossIII nop, जब वह पृष्ठभूमि में होता है, तो पृष्ठभूमि थ्रेड में नहीं, वह कोड चलाने के लिए चाहता है। – fbernardo