2013-01-21 30 views
0

我想在我的应用程序中获取当前位置(经度和纬度值)。 我用下面的代码。Gps提供商正在返回空位置

问题是----------------->

When the Best provider is GPS,Location returned is null. 

我学到了一些SO职位,我添加LocationListener的我的代码,那么它的工作,但是当我重新启动我的设备,然后再次运行该应用程序,当Provider是GPS时,它会提供相同的NULL值。我不明白为什么现在不工作。

我还了解到,全球定位系统供应商在获取值慢,所以我必须添加LocationListener的解决这个issue.So,我已将此添加到我的代码

LocationListener locationListener = new MyLocationListener(); 
      locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 35000, 10, locationListener); 

完整的代码在这里----- ------>

 public void getCurrentlocation() 
    { 
     String providers = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
     Log.e("provider"," "+providers); 
     if(!providers.contains("gps")){ 
      final Intent poke = new Intent(); 
      poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
      poke.addCategory(Intent.CATEGORY_ALTERNATIVE); 
      poke.setData(Uri.parse("3")); 
      sendBroadcast(poke); 
      Log.e("your gps is","enabled"); 
     } 
     LocationListener locationListener = new MyLocationListener(); 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 35000, 10, locationListener); 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 35000, 10, locationListener); 
      // Define the criteria how to select the locatioin provider -> use 
      // default 
      Criteria criteria = new Criteria(); 
      String provider = locationManager.getBestProvider(criteria,true); 
      Log.e("location provider",""+provider); 
      Location location = locationManager.getLastKnownLocation(provider); 

      // Initialize the location fields 
      if (location != null) 
      { 
      System.out.println("Provider " + provider + " has been selected."); 
      strLatitude=String.valueOf(location.getLatitude()); 
        strLongitude=String.valueOf(location.getLongitude()); 
        Log.e("lattitude",strLatitude); 
        Log.e("logntitude",strLongitude); 
        latituteField.setText(strLatitude); 
        longitudeField.setText(strLongitude); 
      } 
      else 
      { 


        strLatitude=String.valueOf(0); 
        strLongitude=String.valueOf(0); 
        Log.e("lattitude",strLatitude); 
        Log.e("logntitude",strLongitude); 
        latituteField.setText(strLatitude); 
        longitudeField.setText(strLongitude); 
      } 




    } 



    private class MyLocationListener implements LocationListener 
    { 

     @Override 
     public void onLocationChanged(Location location) 
     { 

//   mLattitude = location.getLatitude(); 
//   mLongitude = location.getLongitude(); 
// 
//   Log.w("value : ", 
//     String.valueOf(location.getLatitude()) + String.valueOf(location.getLongitude()) 
//       + 
// 
// 
//   context.sendBroadcast(new Intent(Constants.BRDCAST_LOCATION_UPDATED)); 

     } 

     @Override 
     public void onProviderDisabled(String provider) 
     { 
      // Log.w("provider", provider); 

     } 

     @Override 
     public void onProviderEnabled(String provider) 
     { 
      // Log.w("provider", provider); 

     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) 
     { 
      // Log.w("status", String.valueOf(status)); 

     } 


} 

请帮忙提前

感谢

+0

为什么onLocationChanged中的代码注释掉了?这是当GSP或网络向您发送新位置时将会调用的内容。同样,当你使用GSP和网络时,不需要调用getBestProvider。 –

回答

0

嘛余吨里德下面的代码,它获取的纬度和经度:

公共类MainActivity扩展活动 {

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

/* Use the LocationManager class to obtain GPS locations */ 

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    List<String> providers = lm.getProviders(true); 

/*循环数组倒退了,如果你得到一个准确的位置,然后打出来的循环*/

 Location location = null; 

     for (int i=providers.size()-1; i>=0; i--) { 
       location = lm.getLastKnownLocation(providers.get(i)); 
       if (location != null) break; 
     } 

     String Text = "My current location is: " + 
       "Latitud = " + location.getLatitude() + 
       "Longitud = " + location.getLongitude(); 

       Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT).show(); 
    } 

的AndroidManifest.xml:

请参阅下列权限设置:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
相关问题