【问题标题】:Googlemap and latitude and longitude谷歌地图和经纬度
【发布时间】:2014-09-24 12:56:09
【问题描述】:

我受困于经纬度:|

我在做什么:我正在使用 LocationManager 来获取我的当前位置(我制作了对话框......它显示我在加载时加载屏幕

public void onLocationChanged(Location loc)

但是..我设置了一个日志..或者只是一个简单的消息..我从来没有收到这个函数的请求。

但是,如果我使用的是 googlemap 片段 .. 我按下顶部右侧的按钮,它会立即显示在我当前的位置.. 在这种情况下如何正确?如何获取当前位置(经纬度)?

我只是卡住了:(

public class getLocation implements LocationListener
    {
        public getLocation()
        {
            dialog = new ProgressDialog(MainActivity.this);
            dialog.setMessage("Loading GPS Information");
            dialog.setCancelable(true);
            dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            dialog.show();
            lm = (LocationManager) getSystemService(LOCATION_SERVICE);
            new Thread() {
                public void run() {
                    runOnUiThread(new Runnable() {

                        public void run() {

             boolean enabled = lm
                      .isProviderEnabled(LocationManager.GPS_PROVIDER);


                    if (!enabled) {
                        Toast.makeText(MainActivity.this, "GPS NOT ENABLED" , Toast.LENGTH_SHORT).show();
                      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                      startActivity(intent);
                    } else{
                        Toast.makeText(MainActivity.this, "GPS  ENABLED" , Toast.LENGTH_SHORT).show();
                        if(lm.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null){
                            Toast.makeText(MainActivity.this, "LAST LOCATION " , Toast.LENGTH_SHORT).show();
                        }
                        else{
                            Toast.makeText(MainActivity.this, "Last location unknown ", Toast.LENGTH_SHORT).show();
                        }
                        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                                0, getLocation.this);
                    }
                        }
                        });
                    }
                    }.start();

                     handler = new Handler() {
                            public void handleMessage(android.os.Message msg) {
                                dialog.dismiss();

                            };
                        };
        }
        @Override
        public void onLocationChanged(Location loc) {
            // TODO Auto-generated method stub =
            if(loc!=null){
            if(apress){
                at.setText("Lat = "+loc.getLatitude()+" | Long = "+loc.getLongitude());
                apress=false;
                Toast.makeText(MainActivity.this, "OnLocationChanged GPS" , Toast.LENGTH_SHORT).show();
                latG=loc.getLatitude();
                longG=loc.getLongitude();
                showA.setEnabled(true);
                handler.sendEmptyMessage(0);
            }
            }else{
                Toast.makeText(MainActivity.this, "OnLocationChanged GPS Location - null" , Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onProviderDisabled(String arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, "ON PROVIDER DISABLED "+arg0 , Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onProviderEnabled(String arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, "ON PROVIDER ENABLED "+arg0 , Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
            Toast.makeText(MainActivity.this, "ON STATUS CHANGED  "+arg0 , Toast.LENGTH_SHORT).show();

        }
    }

在这个函数中

 public void onLocationChanged(Location loc) {

我从来没有得到正确的呼叫.. 如果我在这里添加 Log.e( 或其他东西) 这意味着它永远不会显示:(

【问题讨论】:

  • 你能添加你所有的类代码
  • 嘿,彼得!如果我正确理解了你的问题。您需要从 Fragment 中删除“显示位置按钮”。第二件事你想知道你的经纬度
  • @TarunSharma 不,我想得到 cur LAT 和 LONG 代码不在地图上,我只是不明白为什么它不工作,但在地图上“显示位置按钮”正如你所说 - 这个按钮总是显示我在哪里 :((((( 我想通过代码得到它
  • 经纬度得到“0.0”吗?
  • @BatuhanC 是的,总是......它在非洲附近 o_O 我认为它只是一个中间

标签: android google-maps gps location


【解决方案1】:

我建议你使用这个子类;

private class GPSLocationListener implements LocationListener,
        GpsStatus.Listener {
    boolean isGPSFix;

    public void onGpsStatusChanged(int event) {
        switch (event) {
        case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
            if (mLastLocation != null)
                isGPSFix = (SystemClock.elapsedRealtime() - lastGPStime) < 3000;
            if (isGPSFix) { // A fix has been acquired.
                Toast toast = Toast.makeText(GPSLocationService.this, "GPS has a fix.", Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
            } else { // The fix has been lost.
                Toast toast = Toast.makeText(GPSLocationService.this, "GPS DOES NOT have a fix.", Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
            }
            break;
        case GpsStatus.GPS_EVENT_FIRST_FIX:
            Toast toast = Toast.makeText(GPSLocationService.this, "GPS got first fix.", Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
            isGPSFix = true;
            break;
        }
    }

    @Override
    public void onLocationChanged(Location location) {
        if(apress){
            try {
                latG = location.getLatitude();
                longG = location.getLongitude();
                at.setText("Lat = "+latG +" | Long = "+longG);
                apress=false;
                showA.setEnabled(true);
            } catch (Exception e) {
                latG = 0.0;
                longG = 0.0;
            }
        }
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        String statusDescription = "unknown";
        switch (status) {
        case LocationProvider.OUT_OF_SERVICE:
            statusDescription = "OUT_OF_SERVICE";
            break;
        case LocationProvider.AVAILABLE:
            statusDescription = "AVAILABLE";
            break;
        case LocationProvider.TEMPORARILY_UNAVAILABLE:
            statusDescription = "TEMPORARILY_UNAVAILABLE";
            break;
        }
    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast toast = Toast.makeText(GPSLocationService.this, "Your GPS is opened", Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast toast = Toast.makeText(GPSLocationService.this, "Your GPS is closed", Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
    }
}

然后用代码从你的 MainActivity 调用这个类;

GPSLocationListener gpsLocationListener = new GPSLocationListener();
// get the system manager
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener);

不要忘记在清单中添加&lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;

【讨论】:

  • 用于干净的代码。您在 getLocation 类构造函数上设置了一个线程,并在此线程中使用lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, getLocation.this); 再次调用 getLocation 类。那么你第一次在哪里调用 getLocation 类呢?
【解决方案2】:

嗯...代码工作正常。只需要留在天空下进行正确的工作..我在家。这就是为什么我没有得到坐标(纬度和经度。谢谢大家......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多