2013-06-21 5 views
6

केस: वर्तमान स्थान के लिए, उपयोगकर्ता ने ऐप इंस्टॉल पर "अनुमति न दें" चुना है, तो क्या एक तरीका है कि मैं उपयोगकर्ता स्थान के लिए फिर से पूछ सकता हूं और वर्तमान स्थान के लिए मूल आईफोन अलर्ट ट्रिगर कर सकता हूं ??आईफोन फिर से वर्तमान स्थान अनुमति के लिए पूछता है

मैं stackoverflow पर कुछ पोस्ट देखा लेकिन पुराने देखते हैं, वहाँ एक समाधान नया SDK या कोई में कॉल करने के लिए अब है एक रास्ता मिल गया,

पोस्ट में भेजा: CLLocation ask again for permission

+2

अभी भी कोई रास्ता नहीं है कि "अनुमति दें" अगर उपयोगकर्ता का चयन करें या "इनकार" करने के लिए एक पुनर्निर्देशन के साथ अनुमति/सक्रियण अनुरोध करने के लिए एक संदेश प्रदर्शित करेगा, वहाँ केवल एक बार प्रति बदल ऐप स्थापित – adali

उत्तर

8

दुर्भाग्य से आप ऐसा नहीं कर सकते हैं। एक चीज जो आप कर सकते हैं उपयोगकर्ता को स्थान सेटिंग बदलने के लिए संकेत देना है।

if (![CLLocationManager locationServicesEnabled]) 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled" 
                 message:@"To re-enable, please go to Settings and turn on Location Service for this app." 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
} 
+1

मैंने पहले से ही यह किया है, लेकिन आप जानते हैं कि क्लाइंट, उनके मन में सब कुछ चाहिए: | –

+0

अच्छा :) बेहतर आपको स्थिति और क्लाइंट के फायदे बताएंगे। – manujmv

0

मैं वहाँ नहीं लगता कि स्थान अनुमति फिर से पूछने का तरीका है। लेकिन यदि आपको वास्तव में उपयोगकर्ता स्थान की आवश्यकता है तो आप सेटिंग को सक्षम करने के लिए उन्हें निर्देश देने के लिए चेतावनी प्रदर्शित कर सकते हैं।

5

ऐसा लगता है कि स्वीकार्य उत्तर पूरी तरह से सत्य नहीं है। [CLLocationManager locationServicesEnabled] दस्तावेज में वर्णित अनुसार स्थान सेवा सक्षम हैं, तो जांचता है।

एक बूलियन मान देता है यह दर्शाता है कि डिवाइस पर स्थान सेवाएं सक्षम हैं या नहीं। उपयोगकर्ता सामान्य में स्थान सेवा स्विच को टॉगल करके सेटिंग एप्लिकेशन से स्थान सेवाओं को सक्षम या अक्षम कर सकता है। आपको यह निर्धारित करने के लिए स्थान अपडेट शुरू करने से पहले इस विधि के वापसी मूल्य की जांच करनी चाहिए कि उपयोगकर्ता के पास वर्तमान डिवाइस के लिए स्थान सेवाएं सक्षम हैं या नहीं। स्थान सेवाएं उपयोगकर्ताओं को पहली बार ऐप में स्थान-संबंधी जानकारी का उपयोग करने का प्रयास करती हैं लेकिन बाद के प्रयासों के लिए संकेत नहीं देती हैं। यदि उपयोगकर्ता स्थान सेवाओं के उपयोग से इंकार कर देता है और आप वैसे भी स्थान अपडेट शुरू करने का प्रयास करते हैं, तो स्थान प्रबंधक अपने प्रतिनिधि को एक त्रुटि रिपोर्ट करता है।

यदि आप यह जांचना चाहते हैं कि उपयोगकर्ता को आपको उसके स्थान का उपयोग करने की अनुमति दी गई है, तो आपको [CLLocationManager authorizationStatus] जांचना चाहिए। यदि आपके ऐप की स्थिति kCLAuthorizationStatusDenied है, तो इसका मतलब है कि उपयोगकर्ता ने अनुमति के लिए पूछे जाने पर आपके ऐप को स्पष्ट रूप से अस्वीकार कर दिया था। आप इसका उपयोग कर सकते हैं और उपयोगकर्ता को तदनुसार सूचित कर सकते हैं।

5

ios8 में, सेब ने UIApplicationOpenSettingsURLString स्थिरता प्रस्तुत की है जो डिवाइस की "सेटिंग्स" दृश्य का स्थान है।

आप (तेज) में निम्न सेटिंग्स को उपयोगकर्ता को कोड कर सकते हैं देखने:

switch CLLocationManager.authorizationStatus() { 
    case .AuthorizedWhenInUse, .Restricted, .Denied: 
     let alertController = UIAlertController(
      title: "Background Location Access Disabled", 
      message: "In order to be notified, please open this app's settings and set location access to 'Always'.", 
      preferredStyle: .Alert) 

     let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil) 
     alertController.addAction(cancelAction) 

     let openAction = UIAlertAction(title: "Open Settings", style: .Default) { (action) in 
      if let url = NSURL(string:UIApplicationOpenSettingsURLString) { 
       UIApplication.sharedApplication().openURL(url) 
      } 
     } 
     alertController.addAction(openAction) 

     self.presentViewController(alertController, animated: true, completion: nil) 
} 
+0

क्या आपको ओपन सेटिंग्स एक्शन जोड़ने से पहले SystemVersion की जांच नहीं करनी है? –

0

यह है कि मैं क्या पिछले जवाब पर विचार किया है: (इस में MonoTouch सी # है, लेकिन आसानी से करने के लिए अनुवाद स्विफ्ट या ओब्जे-सी)

निम्नलिखित अनुमति के लिए पूछते हैं और फिर दिए गए स्थान अपडेट पर आगे बढ़ते हैं। अन्यथा, अगली बार उपयोगकर्ता आ जाएगा; स्थान सेवाओं अक्षम हैं या इनकार किया यह सेटिंग

//Location Manager (foreground) 
     CLLocationManager locMgr = new CLLocationManager(); 
     locMgr.PausesLocationUpdatesAutomatically = false; 

     if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) 
     { 
      locMgr.RequestWhenInUseAuthorization(); 
     } 

     if (CLLocationManager.LocationServicesEnabled && CLLocationManager.Status == CLAuthorizationStatus.AuthorizedWhenInUse) 
     { 
      //set the desired accuracy, in meters 
      locMgr.DesiredAccuracy = 150; 
      locMgr.LocationsUpdated += (object sender, CLLocationsUpdatedEventArgs e) => 
      { 
       Console.WriteLine(e.Locations); 
      }; 

      locMgr.StartUpdatingLocation(); 
     } 
     else if (!CLLocationManager.LocationServicesEnabled || CLLocationManager.Status == CLAuthorizationStatus.Denied) 
     { 
      var alert = UIAlertController.Create(NSBundle.MainBundle.LocalizedString("Location access", "Location access"), NSBundle.MainBundle.LocalizedString("Please check location", "To show your position on the map, you have to enable location services and authorize the app"), UIAlertControllerStyle.Alert); 

      alert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Cancel, null)); 

      if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) 
      { 
       alert.AddAction(UIAlertAction.Create(NSBundle.MainBundle.LocalizedString("Go to settings", "Go to settings"), UIAlertActionStyle.Default, delegate 
       { 

        var url = new NSUrl(UIApplication.OpenSettingsUrlString); 
        UIApplication.SharedApplication.OpenUrl(url); 

       })); 
      } 

      PresentViewController(alert, true, null); 
     } 
संबंधित मुद्दे

 संबंधित मुद्दे