【问题标题】:GPS provider not showing current location at first timeGPS提供商第一次未显示当前位置
【发布时间】:2014-04-21 09:11:57
【问题描述】:

我正在尝试从网络提供商和 gps 获取位置。通过使用返回的纬度和经度,我正在地图上放置标记。当我尝试使用网络提供商应用程序工作正常时。但是当我尝试从 gps 获取位置时,第一次返回 null。之后,它给了我确切的位置结果。如何摆脱这种情况?

我认为我必须做一些小改动,请建议我解决这个问题。

我就是这样做的。

    public class MapActivity extends Activity implements LocationListener {


            private GoogleMap gMap;
            private LocationManager locationManager;
            private String provider;
            boolean gps_enabled = false;
            boolean netwrk_enabled = false;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_map);
                gMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                        .getMap();

    //Focussing india on starting map
                gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
                        23.40276491, 77.51953125), 5));

                locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000L, 10F, this);

                gps_enabled = locationManager
                        .isProviderEnabled(LocationManager.GPS_PROVIDER);

                netwrk_enabled = locationManager
                        .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
                if (gps_enabled)
                    provider = LocationManager.GPS_PROVIDER;
                else
                    provider = LocationManager.NETWORK_PROVIDER;

                Criteria criteria = new Criteria();
                provider = locationManager.getBestProvider(criteria, false);

                Location location = locationManager.getLastKnownLocation(provider);



    CameraPosition cp = new CameraPosition(new LatLng(
                        location.getLatitude(), location.getLongitude()), 14, 40, 90);
                gMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp), 4000,
                        null);
                gMap.addMarker(new MarkerOptions().position(
                        new LatLng(location.getLatitude(), location.getLongitude()))
                        .title("I am here"));

                if (location != null) {

                    if (provider == LocationManager.GPS_PROVIDER)
                        Toast.makeText(getApplicationContext(), "taking from gps",
                                Toast.LENGTH_SHORT).show();

                    else if (provider == LocationManager.NETWORK_PROVIDER)
                        Toast.makeText(getApplicationContext(), "taking from network",
                                Toast.LENGTH_SHORT).show();

                    new HttpGetTask().execute();
                }

            }

            @Override
            protected void onPause() {
                // TODO Auto-generated method stub18d1:d002
                super.onPause();
                locationManager.removeUpdates(this);
            }

            @Override
            protected void onResume() {
                // TODO Auto-generated method stub
                super.onResume();
                locationManager.requestLocationUpdates(provider, 400, 1, this);
            }

            @Override
            public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.map, menu);
                return true;
            }

            @Override
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
                Toast.makeText(this, "Disabled provider " + provider,
                        Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub

                Toast.makeText(this, "Enabled new provider " + provider,
                        Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub

            }

            private class HttpGetTask extends AsyncTask<Void, Void, String> {

        //Passing latitude and longitude here to get lat longs from my remote server.
        // using json parsing i am placing multiple markers here.


            }

        }

【问题讨论】:

    标签: android google-maps gps location


    【解决方案1】:

    您编写的所有代码都是编写的,但您没有在应用程序启动时调用 LocationManager。只需从您的 onCreate() 方法中取消注释您的代码中的以下行。

    //Location location = locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000L, 10F, this);
    

    取消上面的注释并对提供者进行以下更改

    Location location = locationManager.requestLocationUpdates(provider, 5000L, 10F, this);
    

    【讨论】:

    • 你的意思只是 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000L, 10F, this);写。??因为我已经初始化了位置变量知道。
    • 它工作正常,但仅适用于 gps。如果我试图从网络提供商获取位置应用程序崩溃。
    • 查看我编辑的问题。我是这样修改的。对吗?
    • 类型不匹配:无法从 void 转换为 Location 这是我这样做时遇到的错误。
    • @h.APP.y 你必须把那行放在provider = locationManager.getBestProvider(criteria, false);这行之后并删除这行'Location location = locationManager.getLastKnownLocation(provider);'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多