如何获得Android的GPS位置(How to get Android GPS location)

2019-09-02 14:44发布

欢呼声中,我试图通过Android版来取得当前的GPS位置。 我跟着这个教程和Vogellas文章以及。 虽然它不能正常工作。 当使用LocationManager.NETWORK_PROVIDER我一直都想与51纬度和经度9 - 不管我的立场。 当使用LocationManager.GPS_PROVIDER,我得到什么都没有。

虽然一切都使用GMaps工作时:S不知道为什么。 我怎样才能得到当前GPS定位像GMaps呢?

这里是我的代码:

package com.example.gpslocation;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;

public class GPS_Location extends Activity implements LocationListener {

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

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 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.gps__location, menu);
    return true;
}

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

    int latitude = (int) (location.getLatitude());
    int longitude = (int) (location.getLongitude());

    Log.i("Geo_Location", "Latitude: " + latitude + ", Longitude: " + longitude);
}

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

}

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

}

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

}

}

Answer 1:

这是你的问题:

int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());

纬度和经度是double -值,因为它们代表着度的位置。

通过铸造他们int ,你丢弃逗号,这使得很大的差异背后的一切。 见“十进制度-维基”



Answer 2:

试试看 :

public LatLng getLocation()
    {
     // Get the location manager
     LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
     Criteria criteria = new Criteria();
     String bestProvider = locationManager.getBestProvider(criteria, false);
     Location location = locationManager.getLastKnownLocation(bestProvider);
     Double lat,lon;
     try {
       lat = location.getLatitude ();
       lon = location.getLongitude ();
       return new LatLng(lat, lon);
     }
     catch (NullPointerException e){
         e.printStackTrace();
       return null;
     }
    }


Answer 3:

这段代码有一个问题:

int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());

你可以改变intdouble

double latitude = location.getLatitude();
double longitude = location.getLongitude();


Answer 4:

最初的问题是通过改变解决latlon翻番。

我要评论添加到与解决方案Location location = locationManager.getLastKnownLocation(bestProvider); 它的工作原理,找出最后一个已知的位置,当其他应用程序是lisnerning了点。 如果,例如,没有应用程序没有,既然设备开始,该代码将返回零(花了一些时间自己最近明白这一点)。

此外,这是一个很好的做法,停止监听时,有没有必要通过locationManager.removeUpdates(this);

另外,即使在权限manifest ,当位置服务在设备上的Android设置中启用代码工作。



Answer 5:

摘抄:-

try 
        {
          cnt++;scnt++;now=System.currentTimeMillis();r=rand.nextInt(6);r++;
            loc=lm.getLastKnownLocation(best);
            if(loc!=null){lat=loc.getLatitude();lng=loc.getLongitude();}

            Thread.sleep(100);
            handler.sendMessage(handler.obtainMessage());
         } 
        catch (InterruptedException e) 
        {
            Toast.makeText(this, "Error="+e.toString(), Toast.LENGTH_LONG).show();
        }

正如你可以在上面看到,一个线程运行旁边的用户界面活动的主线,其连续显示GPS纬度,经度非常久远的当前时间和随机骰子掷。

如果你很好奇,然后只检查全码: GPS定位与随机骰子扔在与单独的线程当前时间



文章来源: How to get Android GPS location