পর্যায়ক্রমিক আইওএস পটভূমি অবস্থান আপডেট


92

আমি এমন একটি অ্যাপ্লিকেশন লিখছি যা উচ্চ নির্ভুলতা এবং কম ফ্রিকোয়েন্সি সহ পটভূমি অবস্থান আপডেট প্রয়োজন । সমাধানটি একটি পটভূমি এনএসটাইমারের কাজ বলে মনে হচ্ছে যা লোকেশন ম্যানেজারের আপডেটগুলি শুরু করে, যা তাৎক্ষণিকভাবে বন্ধ হয়ে যায়। এই প্রশ্ন আগে জিজ্ঞাসা করা হয়েছে:

আমি কীভাবে আমার আইওএস অ্যাপ্লিকেশনটিতে প্রতি n মিনিটে পটভূমি অবস্থান আপডেট করব?

অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে যাওয়ার পরে প্রতি n মিনিটের পরে ব্যবহারকারীর অবস্থান প্রাপ্ত করা

আইওএস আদর্শ পটভূমি অবস্থান ট্র্যাকিং টাইমার সমস্যা নয়

"অবস্থান" ব্যাকগ্রাউন্ড মোড সহ আইওএস দীর্ঘ-চলমান ব্যাকগ্রাউন্ড টাইমার

অবস্থান ট্র্যাকিংয়ের উপর ভিত্তি করে আইওএস পুরো সময়ের পটভূমি-পরিষেবা

তবে আমি এখনও কাজ করার ন্যূনতম উদাহরণ পাইনি । উপরোক্ত স্বীকৃত উত্তরের প্রতিটি আদেশের চেষ্টা করার পরে, আমি এক সূচনা পয়েন্ট একসাথে রেখেছি। পটভূমি প্রবেশ করানো:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        NSLog(@"ending background task");
        [[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
        self.bgTask = UIBackgroundTaskInvalid;
    }];


    self.timer = [NSTimer scheduledTimerWithTimeInterval:60
                                                  target:self.locationManager
                                                selector:@selector(startUpdatingLocation)
                                                userInfo:nil
                                                 repeats:YES];
}

এবং প্রতিনিধি পদ্ধতি:

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
           fromLocation:(CLLocation *)oldLocation {

    NSLog(@"%@", newLocation);

    NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
    [self.locationManager stopUpdatingLocation];

}

বর্তমান আচরণটি হ'ল backgroundTimeRemaining180 সেকেন্ড থেকে শূন্যে হ্রাস (অবস্থান লগ করার সময়) এবং তারপরে মেয়াদোত্তীর্ণ হ্যান্ডলারটি কার্যকর করে এবং পরবর্তী কোনও অবস্থান আপডেট হয় না। অনির্দিষ্টকালের জন্য পটভূমিতে পর্যায়ক্রমিক অবস্থান আপডেটগুলি পেতে আমি কীভাবে উপরের কোডটি সংশোধন করব ?

আপডেট : আমি আইওএস 7 কে টার্গেট করছি এবং ব্যাকগ্রাউন্ডের কাজগুলি আলাদাভাবে আচরণ করে এমন কিছু প্রমাণ পাওয়া যায়:

ব্যাকগ্রাউন্ড টাস্ক থেকে আইওএস 7 এ লোকেশন ম্যানেজারটি শুরু করুন


আপনি iOS এর কোন সংস্করণটি লক্ষ্য করছেন তা উল্লেখ করবেন না। আইওএস 7 (উদাহরণস্বরূপ) পূর্বসূরীর চেয়ে আলাদা মাল্টিটাস্কিং সিস্টেম রয়েছে।
জেসন হোয়াইটহর্ন

@ জেসন হোয়াইটহর্ন আমি প্রশ্ন আপডেট করেছি।
প্যাকিং

4
@ পকোভিং: অ্যাপটি মেরে ফেলা বা বন্ধ করে দেওয়া সত্ত্বেও আপনার সমাধান কি কাজ করবে?
নীরভ

উত্তর:


62

দেখে মনে হচ্ছে stopUpdatingLocationএটিই পটভূমি ওয়াচডগ টাইমারকে ট্রিগার করে, তাই আমি এটিকে এর didUpdateLocationসাথে প্রতিস্থাপন করেছি :

[self.locationManager setDesiredAccuracy:kCLLocationAccuracyThreeKilometers];
[self.locationManager setDistanceFilter:99999];

যা কার্যকরভাবে জিপিএসকে শক্তিশালী করে বলে মনে হচ্ছে। NSTimerএরপরে পটভূমির জন্য নির্বাচক হন:

- (void) changeAccuracy {
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [self.locationManager setDistanceFilter:kCLDistanceFilterNone];
}

আমি যা করছি তা প্রতি কয়েক মিনিটের মধ্যে উচ্চ-নির্ভুলতার সমন্বয় পেতে যথাযথভাবে টগল করছে এবং কারণ এটি locationManagerবন্ধ করা হয়নি , এটি backgroundTimeRemainingতার সর্বোচ্চ মান ধরে। এটি kCLLocationAccuracyBestআমার ডিভাইসে প্রতি ঘণ্টায় 10% ডলার ( পটভূমিতে ধ্রুবক সহ ) থেকে প্রতি ঘণ্টায় 2% এ হ্রাস পেয়েছে ।


4
আপনি কি পুরো প্রশ্নের উদাহরণ দিয়ে আপনার প্রশ্ন আপডেট করতে পারবেন? এর মতো কিছু: "আপডেট: আমি এটি আবিষ্কার করেছি Here এখানে আমার সমাধান ..."
স্মহলোয়ে

@ ভাইরাসমকা আমি আগের উত্তরটিতে ফিরে গিয়েছিলাম যা অনুরূপ পারফরম্যান্সের সাথে অনেক বেশি দৃ rob়। সামগ্রিকভাবে অবস্থানের আপডেটগুলি থামানো কোনও রেসের শর্তটি (বা কিছু অন্যান্য অ-নিরস্তাত্মক পরিস্থিতিতে) ট্রিগার করে বলে মনে হচ্ছে।
প্যাকিং

এই প্রত্যাশা যেমনটি আপনি প্রত্যাশা করছেন তেমন কার্যকর হবে না: 1) দূরত্বের ফিল্টার সম্পত্তিটির মান বাড়ানোর ফলে ব্যাটারি সাশ্রয় হয় না কারণ জিপিএসকে এখনও আপনার অবস্থান নির্ধারণ করতে হবে। 2) আইওএসে 7 ব্যাকগ্রাউন্ডের সময়টি উপযুক্ত নয়। 3) আপনি উল্লেখযোগ্য চ্যাঞ্জলোকশন পরিষেবাগুলিতে অ্যাকাউন্টে নিতে পারেন। পটভূমি থেকে অবস্থান ... - 4) ছাড়াও আপনার soution থেকে আইওএস 7 এ আপনি UIBackgroundModes শুরু করতে পারেন না
aMother

4
@AMother 1) আমি বুঝতে পারি যে দূরত্বের ফিল্টারটি বাড়ানো (এবং কলব্যাকগুলি প্রসেসিং করছে না) বেশি ব্যাটারি সঞ্চয় করে না। যাইহোক, সেটডিজায়ার্ডএকুরিসিটি করে! এটি সেল টাওয়ারের তথ্যগুলিতে ফিরে আসে যা মূলত ফ্রি আসে। 2) নিরলস? 3) আমি দৃ bold়ভাবে উল্লেখ করেছি যে আমার উচ্চ নির্ভুলতার প্রয়োজন। উল্লেখযোগ্য অবস্থানের পরিবর্তনগুলি এটি সরবরাহ করে না। 4) অবস্থান পরিষেবাগুলি পটভূমি থেকে শুরু / বন্ধ করা হচ্ছে না।
প্যাকিং

4
আমি জানি এটি এখন একটি পুরাতন পোস্ট, তবে আমার অ্যাপ্লিকেশন ব্যবহারকারীরা যারা এই কৌশলটি ব্যবহার করে তারা আইওএস 9-তে আপগ্রেড করার পরে ব্যাটারি ব্যবহারের ক্ষেত্রে উল্লেখযোগ্য বৃদ্ধি লক্ষ্য করেছে। আমি এখনও তদন্ত করিনি, তবে আমার মনে হচ্ছে যে এই 'কৌতুক' আর কাজ করে না?
গ্যারি রাইট

45

আমি লোকেশন পরিষেবাদি ব্যবহার করে একটি অ্যাপ লিখেছি, অ্যাপ্লিকেশনকে অবশ্যই প্রতি দশকে অবস্থান পাঠাতে হবে। এবং এটি খুব ভাল কাজ করেছে।

কেবলমাত্র " অনুমতিডেফার্ডলোকেশনআপডেটসঅন্টিল ট্র্যাভেলড: টাইমআউট ব্যবহার করুনঅ্যাপলের ডকটি অনুসরণ " পদ্ধতিটি ।

পদক্ষেপগুলি নিম্নরূপ:

প্রয়োজনীয়: আপডেট অবস্থানের জন্য পটভূমি মোডটি নিবন্ধ করুন।

1. যথাযথতা এবং ফিল্টারডাস্টেন্সের সাথে লোকেশনম্যাঞ্জার এবং স্টার্টআপডেটিং অবস্থান তৈরি করুন যা আপনি চান:

-(void) initLocationManager    
{
    // Create the manager object
    self.locationManager = [[[CLLocationManager alloc] init] autorelease];
    _locationManager.delegate = self;
    // This is the most important property to set for the manager. It ultimately determines how the manager will
    // attempt to acquire location and thus, the amount of power that will be consumed.
    _locationManager.desiredAccuracy = 45;
    _locationManager.distanceFilter = 100;
    // Once configured, the location manager must be "started".
    [_locationManager startUpdatingLocation];
}

২. পটভূমিতে "অনুমতিডেফারডলকেশনউপডেটসঅন্টিল ট্র্যাভেলড: টাইমআউট" পদ্ধতিটি ব্যবহার করে অ্যাপটিকে চিরতরে চালিয়ে যেতে, অ্যাপ্লিকেশনটিকে ব্যাকগ্রাউন্ডে স্থানান্তরিত করার সময় আপনাকে অবশ্যই নতুন প্যারামিটারের সাথে আপডেটিং পুনরায় চালু করতে হবে:

- (void)applicationWillResignActive:(UIApplication *)application {
     _isBackgroundMode = YES;

    [_locationManager stopUpdatingLocation];
    [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [_locationManager setDistanceFilter:kCLDistanceFilterNone];
    _locationManager.pausesLocationUpdatesAutomatically = NO;
    _locationManager.activityType = CLActivityTypeAutomotiveNavigation;
    [_locationManager startUpdatingLocation];
 }

৩. "লোকেশনম্যানেজার: ডু ইউপডেটলোকেশনস:" কলব্যাক সহ অ্যাপ্লিকেশন আপডেট হয়ে গেছে

-(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
//  store data
    CLLocation *newLocation = [locations lastObject];
    self.userLocation = newLocation;

   //tell the centralManager that you want to deferred this updatedLocation
    if (_isBackgroundMode && !_deferringUpdates)
    {
        _deferringUpdates = YES;
        [self.locationManager allowDeferredLocationUpdatesUntilTraveled:CLLocationDistanceMax timeout:10];
    }
}

৪. তবে আপনার তখন ডেটা হ্যান্ডেল করা উচিত "লোকেশন ম্যানেজার: ডিফিনিশডেফেরিডআপডেটস উইথ এরিয়ার:" আপনার উদ্দেশ্যটির জন্য কলব্যাক

- (void) locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(NSError *)error {

     _deferringUpdates = NO;

     //do something 
}

৫. দ্রষ্টব্য: আমি মনে করি প্রতিটি সময় অ্যাপ্লিকেশনটিকে ব্যাকগ্রাউন্ড / ভোলাউন্ড মোডের মধ্যে স্যুইচ করে আমাদের লোকেশন ম্যানেজারের প্যারামিটারগুলি পুনরায় সেট করা উচিত।


এটি দুর্দান্ত কাজ করে এবং আমি অনুভব করি যে এটি ডাব্লুডাব্লুডিসিতে গত বছর উল্লিখিত হিসাবে সঠিক উপায় !! পোস্টের জন্য ধন্যবাদ
প্রসাদ 1250

@ সাম্থুই 7 ধন্যবাদ এই কাজের জন্য, তবে আমারও সমাপ্তির পরে অবস্থান নেওয়া দরকার। এটা কিভাবে হতে পারে.??
মোহিত তোমার

@ samthui7 .. দয়া করে এই কিউ ... দেখুন stackoverflow.com/questions/37338466/...
সুরজ Sukale

4
@ আমার: আমি আইওএস 10 বিটাও পরীক্ষা করেছিলাম, এটি এখনও কার্যকর। মনে রাখবেন যে আমরা startUpdatingLocation আগে কিছু কোড যোগ করা প্রয়োজন: allowsBackgroundLocationUpdates = YESএবং requestAlwaysAuthorizationবা requestWhenInUseAuthorization। যেমন: `CLLocationManager * locationManager = [[CLLocationManager বরাদ্দ] init]; locationManager.delegate = স্ব; অবস্থানManager.allowsBackgroundLocationUpdates = হ্যাঁ; [অবস্থান ম্যানেজারের অনুরোধআলওয়েজ অনুমোদন]; [লোকেশন ম্যানেজার স্টার্টআপডেটিং লোকেশন];
s

4
@ নীরভ ন। আমি যতদূর জানি অ্যাপল আমাদের তা করতে দিতে পারে বলে আমি মনে করি না।
samthui7

39
  1. যদি আপনার কীটি UIBackgroundModesদিয়ে আপনার প্লাস্টে থাকে locationতবে আপনাকে beginBackgroundTaskWithExpirationHandlerপদ্ধতিটি ব্যবহার করার দরকার নেই । এটা নিরর্থক। এছাড়াও আপনি এটিকে ভুলভাবে ব্যবহার করছেন ( এখানে দেখুন ) তবে আপনার প্লাস্টটি সেট হওয়ার পরে এটি কার্যকর।

  2. UIBackgroundModes locationপ্লিস্ট সহ অ্যাপটি অনির্দিষ্টকালের জন্য পটভূমিতে CLLocationMangerচলতে থাকবে যতক্ষণ চলবে। ফোন দিলেstopUpdatingLocation পটভূমিতে থাকাকালীন তবে অ্যাপটি বন্ধ হয়ে যাবে এবং আবার শুরু হবে না।

    হয়ত আপনি কল beginBackgroundTaskWithExpirationHandlerকরার আগে কল করতে পারেন stopUpdatingLocationএবং তারপরে startUpdatingLocationফোন করার পরে আপনি কল করতে পারেনendBackgroundTaskজিপিএস বন্ধ থাকাকালীন , তবে আমি এটি কখনও চেষ্টা করি নি - এটি কেবল একটি ধারণা।

    অন্য একটি বিকল্প (যা আমি চেষ্টা করি নি) হ'ল পটভূমিতে থাকাকালীন লোকেশন ম্যানেজারটি চালিয়ে রাখা তবে একবার আপনি একটি সঠিক অবস্থান পেয়ে গেলে পরিবর্তন করুন desiredAccuracy গেলে জিপিএস চিপ বন্ধ হয়ে যাওয়ার জন্য (ব্যাটারি বাঁচানোর জন্য) সম্পত্তিটি 1000 মিটার বা তারও বেশি হয়ে যায়। তারপরে 10 মিনিট পরে যখন আপনার অন্য অবস্থানের আপডেটের প্রয়োজন হয়, desiredAccuracyআপনি কোনও সঠিক অবস্থান না পাওয়া পর্যন্ত জিপিএস চালু করতে পিছনে 100 মিটারে পরিবর্তন করুন repeat

  3. আপনি যখন ফোন করবেন startUpdatingLocation অবস্থান পরিচালককে অবশ্যই অবস্থানটি পেতে সময় দিতে হবে। আপনার সাথে সাথে ফোন করা উচিত নয় stopUpdatingLocation। আমরা এটি সর্বোচ্চ 10 সেকেন্ডের জন্য চালাতে দিয়েছি বা যতক্ষণ না আমরা কোনও ক্যাশেড উচ্চ নির্ভুলতার অবস্থান না পাই।

  4. এটি আপনার ন্যূনতম প্রয়োজনীয় নির্ভুলতার সাথে মিলিত হয়েছে তা নিশ্চিত করার জন্য আপনার ক্যাশেড অবস্থানগুলি ফিল্টার করতে হবে এবং যে অবস্থানটি পেয়েছেন তার যথার্থতা পরীক্ষা করতে হবে (দেখুন দেখুন) এখানে দেখুন )। আপনার প্রথম আপডেটটি হতে পারে 10 মিনিট বা 10 দিনের পুরানো। আপনার প্রাপ্ত প্রথম নির্ভুলতা 3000 মিটার হতে পারে।

  5. পরিবর্তে উল্লেখযোগ্য অবস্থান পরিবর্তন API গুলি ব্যবহার বিবেচনা করুন। একবার আপনি উল্লেখযোগ্য পরিবর্তনের বিজ্ঞপ্তিটি পেয়ে গেলে, CLLocationManagerউচ্চ নির্ভুলতার অবস্থান পাওয়ার জন্য আপনি কয়েক সেকেন্ডের জন্য শুরু করতে পারেন। আমি নিশ্চিত নই, আমি উল্লেখযোগ্য অবস্থান পরিবর্তন পরিষেবাগুলি কখনও ব্যবহার করি নি।


অ্যাপল CoreLocationরেফারেন্সটি beginBackgroundTaskWithExpirationHandlerপটভূমিতে অবস্থানের ডেটা প্রক্রিয়াকরণের সময় ব্যবহারের পরামর্শ দিচ্ছে বলে মনে হয় : "যদি কোনও আইওএস অ্যাপ্লিকেশনটি অবস্থানের ডেটা প্রক্রিয়া করার জন্য আরও বেশি সময় প্রয়োজন হয়, তবে এটি বিটব্যাকগ্রাউন্ড টাস্কউইথনাম: মেয়াদোত্তীকরণ হ্যান্ডলার: ইউআইএপ্লিকেশন শ্রেণির পদ্ধতি ব্যবহার করে আরও পটভূমি সম্পাদনের সময় অনুরোধ করতে পারে।" - বিকাশকারী
অ্যাপ্লিকেশন

4
_locationManager.allowsBackgroundLocationUpdates = হ্যাঁ যোগ করতে ভুলবেন না; আইওএস 9+ এর জন্য, অন্যথায় অ্যাপ্লিকেশন 180 সেকেন্ডের পরে ঘুমাতে যাবে
kolyancz

@ কোলিয়ান্সজ আমি আইফোন 6+ এর জন্য আইওএস 10.1.1 এ চেষ্টা করেছি। এটি ঘুমাতে এবং ট্রিগার করতে প্রায় 17 মিনিট সময় নিয়েছিল locationManagerDidPauseLocationUpdates। আমি সেই আচরণটি 10 ​​বার যাচাই করেছি!
মধু

আপনি কেন এটি মোটা বলছেন তা সত্যিই আমি পাই না এবং তারপরে আপনি বলছেন যে আপনি এটি একটি ব্যাকগ্রাউন্ডের ভিতরে আবৃত করুন ...
হানি

10

যখন অবস্থান পরিষেবাটি শুরু করার এবং পটভূমি টাস্ক বন্ধ করার সময় হয়ে যায়, ব্যাকগ্রাউন্ড টাস্কটি বিলম্বের সাথে বন্ধ করা উচিত (1 সেকেন্ড যথেষ্ট হওয়া উচিত)। অন্যথায় লোকেশন পরিষেবা শুরু হবে না। এছাড়াও লোকেশন পরিষেবা কয়েক সেকেন্ডের জন্য ছেড়ে দেওয়া উচিত (উদাহরণস্বরূপ 3 সেকেন্ড)।

একটি কোকোপড এপিএসচুলেডলোকেশন ম্যানেজার রয়েছে যা পছন্দসই অবস্থানের যথাযথতার সাথে প্রতি এন সেকেন্ডে পটভূমির অবস্থান আপডেট পেতে দেয় ।

let manager = APScheduledLocationManager(delegate: self)
manager.startUpdatingLocation(interval: 170, acceptableLocationAccuracy: 100)

ভান্ডারটিতে সুইফট 3-এ লিখিত একটি উদাহরণ অ্যাপ রয়েছে।


1

startMonitoringSignificantLocationChanges:এপিআই দিয়ে চেষ্টা করে দেখুন ? এটি কম ফ্রিকোয়েন্সি সহ স্পষ্টভাবে আগুন দেয় এবং যথার্থতা যথাযথভাবে ভাল। অতিরিক্তভাবে অন্যান্য ব্যবহারের তুলনায় এর আরও অনেক সুবিধা রয়েছেlocationManager এপিআই ।

এই এপিআই সম্পর্কিত আরও অনেক কিছু এই লিঙ্কটিতে ইতিমধ্যে আলোচনা করা হয়েছে


4
আমি এই পদ্ধতির চেষ্টা করেছি। এটি ডকস থেকে :This interface delivers new events only when it detects changes to the device’s associated cell towers
যথাযথতার

1

আপনার ইনফরমেশন.প্লেস্টে নিম্নলিখিত কী যুক্ত করে আপনার অ্যাপ্লিকেশনটিতে অবস্থান আপডেট মোড যুক্ত করতে হবে।

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

didUpdateToLocationপদ্ধতিটি কল করা হবে (এমনকি আপনার অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে থাকা অবস্থায়ও)। আপনি এই পদ্ধতির কলের ভিত্তিতে যে কোনও জিনিস সম্পাদন করতে পারেন


অবস্থান আপডেট মোড ইতিমধ্যে তথ্য.পুলিস্টে রয়েছে। আমি যেমন উল্লেখ করেছি, আমি 180 সেকেন্ডের ব্যাকগ্রাউন্ডের মেয়াদ শেষ হওয়া পর্যন্ত আপডেটগুলি পাচ্ছি।
পিসিভিং

0

আইওএস 8 এর পরে এগুলি অ্যাপল দ্বারা তৈরি কোরলোকেশন ফ্রেমওয়ার্ক সম্পর্কিত ব্যাকগ্রাউন্ড আনার এবং আপডেটের ক্ষেত্রে বেশ কয়েকটি পরিবর্তন।

1) অ্যাপল অ্যাপ্লিকেশনটিতে লোকেশন আপডেট আনার জন্য সর্বদা অনুমোদনের অনুরোধটি প্রবর্তন করে।

2) অ্যাপল আইওএসের ব্যাকগ্রাউন্ড থেকে অবস্থান আনার জন্য ব্যাকগ্রাউন্ডলোকেশনআপডেটস প্রবর্তন করে।

পটভূমিতে অবস্থান আনার জন্য আপনাকে এক্সকোডের সক্ষমতায় অবস্থান আপডেট সক্ষম করতে হবে।

//
//  ViewController.swift
//  DemoStackLocation
//
//  Created by iOS Test User on 02/01/18.
//  Copyright © 2018 iOS Test User. All rights reserved.
//

import UIKit
import CoreLocation

class ViewController: UIViewController {

    var locationManager: CLLocationManager = CLLocationManager()
    override func viewDidLoad() {
        super.viewDidLoad()
        startLocationManager()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    internal func startLocationManager(){
        locationManager.requestAlwaysAuthorization()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.delegate = self
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.startUpdatingLocation()
    }

}

extension ViewController : CLLocationManagerDelegate {

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){
        let location = locations[0] as CLLocation
        print(location.coordinate.latitude) // prints user's latitude
        print(location.coordinate.longitude) //will print user's longitude
        print(location.speed) //will print user's speed
    }

}

0

অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় মানক অবস্থানের পরিষেবাগুলি ব্যবহার করার জন্য আপনাকে প্রথমে লক্ষ্য সেটিংসের সক্ষমতা ট্যাবে ব্যাকগ্রাউন্ড মোডগুলি চালু করতে হবে এবং অবস্থান আপডেটগুলি নির্বাচন করতে হবে।

বা, এটিকে সরাসরি তথ্য.প্লেস্টে যুক্ত করুন

<key>NSLocationAlwaysUsageDescription</key>
 <string>I want to get your location Information in background</string>
<key>UIBackgroundModes</key>
 <array><string>location</string> </array>

তারপরে আপনাকে সিএললোকেশনম্যানেজার সেটআপ করতে হবে

উদ্দেশ্য গ

//The Location Manager must have a strong reference to it.
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
//Request Always authorization (iOS8+)
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { [_locationManager requestAlwaysAuthorization];
}
//Allow location updates in the background (iOS9+)
if ([_locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]) { _locationManager.allowsBackgroundLocationUpdates = YES;
}
[_locationManager startUpdatingLocation];

সুইফট

self.locationManager.delegate = self
if #available (iOS 8.0,*) {
    self.locationManager.requestAlwaysAuthorization()
}
if #available (iOS 9.0,*) {
    self.locationManager.allowsBackgroundLocationUpdates = true
}
self.locationManager.startUpdatingLocation()

সূত্র: https://medium.com/@javedmultani16/location-service-in-the-background-ios-942c89cd99ba


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.