2010-08-12 6 views
13

मुझे अन्य उत्तरों के माध्यम से बिखरे हुए इस उत्तर के बिट्स और टुकड़े मिल गए हैं, लेकिन मैं इसे दूसरों के लिए यहां रिकॉर्ड करना चाहता हूं।एंड्रॉइड स्थान या सेवा अक्षम करने के लिए संकेत मिलता है यदि अक्षम

मैं उपयोगकर्ता के जीपीएस और/या नेटवर्क स्थान का अनुरोध कैसे कर सकता हूं और यदि उन्होंने सेवा सक्षम नहीं की है, तो उन्हें ऐसा करने के लिए प्रेरित करें?

उत्तर

19

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

सबसे पहले, आपको अपने मैनिफेस्ट में "android.permission.ACCESS_COARSE_LOCATION" अनुमति जोड़नी होगी। आप जीपीएस की जरूरत है (नेटवर्क स्थान पर्याप्त संवेदनशील नहीं है), बजाय अनुमति "android.permission.ACCESS_FINE_LOCATION" जोड़ने के लिए, और "Criteria.ACCURACY_FINE"

Button gpsButton = (Button)this.findViewById(R.id.buttonGPSLocation); 
gpsButton.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // Start loction service 
     LocationManager locationManager = (LocationManager)[OUTERCLASS].this.getSystemService(Context.LOCATION_SERVICE); 

     Criteria locationCritera = new Criteria(); 
     locationCritera.setAccuracy(Criteria.ACCURACY_COARSE); 
     locationCritera.setAltitudeRequired(false); 
     locationCritera.setBearingRequired(false); 
     locationCritera.setCostAllowed(true); 
     locationCritera.setPowerRequirement(Criteria.NO_REQUIREMENT); 

     String providerName = locationManager.getBestProvider(locationCritera, true); 

     if (providerName != null && locationManager.isProviderEnabled(providerName)) { 
      // Provider is enabled 
      locationManager.requestLocationUpdates(providerName, 20000, 100, [OUTERCLASS].this.locationListener); 
     } else { 
      // Provider not enabled, prompt user to enable it 
      Toast.makeText([OUTERCLASS].this, R.string.please_turn_on_gps, Toast.LENGTH_LONG).show(); 
      Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      [OUTERCLASS].this.startActivity(myIntent); 
     } 
    } 
}); 

मेरे बाहरी कक्षा में "Criteria.ACCURACY_COARSE" बदलने इस श्रोता ने

private final LocationListener locationListener = new LocationListener() { 

    @Override 
    public void onLocationChanged(Location location) { 
     [OUTERCLASS].this.gpsLocationReceived(location); 
    } 

    @Override 
    public void onProviderDisabled(String provider) {} 

    @Override 
    public void onProviderEnabled(String provider) {} 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 

}; 

फिर भी, जब भी आप इसे सुनना बंद करना चाहते हैं। आपको कम से कम अपनी गतिविधि की ऑन-स्टॉप विधि के दौरान यह कॉल करना चाहिए।

LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 
locationManager.removeUpdates(this.locationListener); 
+2

getBestProvider पर दूसरा पैरामीटर (locationCritera, true) चेकों जो प्रदाताओं रहे हैं:
अब भी आप जीपीएस और फिर से प्रत्यक्ष उपयोगकर्ता की वर्तमान स्थिति के बारे में जीपीएस चालू करने के लिए के लिए जाँच करने की जरूरत है, इस का उपयोग इसलिए, सिद्धांत रूप में सक्षम, आपको यह जांचने की आवश्यकता नहीं है कि यह फिर से सक्षम है या नहीं। – Eduardo

0

आप का उपयोग करना चाहिए नई LocationRequest गूगल सेवाओं खेलने में शामिल स्थान सेवाओं को सक्षम करने के लिए संकेत करने के लिए, आप स्टैक ओवरफ़्लो पर जवाब का एक बहुत अध्ययन करने के बाद LocationRequest

2

में पूरा गाइड पाया जा सकता है, मैंने इस विधि को पूरी तरह से ठीक काम करने के लिए पाया और इसके लिए बहुत सारे कोड की आवश्यकता नहीं है।
वैश्विक चर के रूप में int GPSoff = 0 घोषित करें।

try { 
       GPSoff = Settings.Secure.getInt(getContentResolver(),Settings.Secure.LOCATION_MODE); 
      } catch (Settings.SettingNotFoundException e) { 
       e.printStackTrace(); 
      } 
      if (GPSoff == 0) { 
       showMessageOKCancel("You need to turn Location On", 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           Intent onGPS = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
           startActivity(onGPS); 
          } 
         }); 
      } 
+0

getContentResolver(), showMessageOKCancel और startActivity क्या है? वे सभी अनसुलझे हैं – hfz