获取经度和纬度需要很长的时间(Getting longitude and latitude take

2019-10-19 09:43发布

我让我的设备的经度和纬度,但它需要在30秒到一分钟这样做。 任何建议削减的时候了吗?

public class MainActivity extends Activity
{
public String zipcode;
public double latG;
public double lonG;

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

    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
    boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);

    if (!enabled) 
    {
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
      startActivity(intent);
    }

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.getLastKnownLocation(Context.LOCATION_SERVICE);
    LocationListener locationListener = new LocationListener()
    {

         public void onLocationChanged(Location location) 
         {
                if (location != null) 
                {
                    latG = location.getLatitude();
                    lonG = location.getLongitude();
                    Toast.makeText(MainActivity.this,
                            latG + " " + lonG,
                            Toast.LENGTH_LONG).show();
                }
            }
            public void onProviderDisabled(String provider) 
            {

            }

            public void onProviderEnabled(String provider) 
            {

            }

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

            }



    };
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);



    Geocoder geocoder = new Geocoder(this, Locale.getDefault());
    List<Address> addresses = null;
    try 
    {
        addresses = geocoder.getFromLocation(latG, lonG, 1);
    } 
    catch (IOException e) 
    {
        Context context = this;
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
        alertDialogBuilder.setTitle("Error");
        alertDialogBuilder.setMessage("Error in getting address information.");
        alertDialogBuilder.setCancelable(true);

    }

    for (Address address : addresses) 
    {
        if(address.getPostalCode() != null)
        {
            zipcode = address.getPostalCode();
            Toast.makeText(MainActivity.this, zipcode, Toast.LENGTH_LONG).show();
            break;
        }
    }

}

}

Answer 1:

您正在使用GPS_PROVIDER用于提取GPS数据。 GPS_PROVIDER直接从卫星获取信息,因此需要一定的时间,第一次加载此。 此外GPS_PROVIDER花费超过30秒,如果你不低于开放天空。 GPS_PROVIDER当你在办公室内或地下室可能返回NULL。

还有另外一种方式这是使用NETWORK_PROVIDER 。 这提供商会给你根据你当前的网络状态GPS细节。 这会不会是像很多准确GPS_PROVIDER但它工作得更快。



Answer 2:

您好您正在使用GPS提供商,因为它依赖于一些限制像你这样的建筑位置,物理位置,天气GPS数据可从卫星所以使用网络提供商可以在你的情况下更快地请有看看这可能需要一些时间给定的代码段,

http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/



Answer 3:

最好的选择是使用谷歌播放服务及其LocationClient。

http://developer.android.com/google/play-services/location.html

这给你一个提供商自动从所有供应商类型选择最佳可用信息,并且可以使用立即返回在某些情况下,位置getLastLocation()



Answer 4:

尝试在设备运行,而不是在模拟器中运行它。



Answer 5:

尝试这个

 try {
        gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex) {
    }
    try {
        network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex) {}


if (gps_enabled) {
            locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
        }
        if (network_enabled) {
            locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);

它会给什么都服务available.Even你可以把你的优先级响应



Answer 6:

使用此代码来获取更快,

String provider;
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        if (provider != null && !provider.equals("")) {
            Location location = locationManager.getLastKnownLocation(provider);

            locationManager.requestLocationUpdates(provider, 20000, 1, this);

            if (location != null) 
                         {
                onLocationChanged(location);
                              //your remaining code
                         }


文章来源: Getting longitude and latitude takes a very long time