如何使用LocationManager从GPS_PROVIDER获取GPS坐标

时间:2019-03-26 11:02:23

标签: android locationmanager android-gps

我正在尝试从Android手机中的GPS获取纬度和经度。主要问题是,无论我如何尝试,都无法从该特定提供程序获得它。但是,如果我尝试其他提供商(网络),则可以很好地获得坐标。

TLDR->问题:我无法在Android手机上从GPS_PROVIDER获取位置/坐标。如何获得它们?

我尝试了getLastKnownLocation()requestSingleUpdate(...)requestLocationUpdates(...)。 所有这些尝试的常数似乎是它们与网络提供商一起使用,但与GPS_PROVIDER不一起使用。 RequestSingleUpdaterequestLocationUpdates不生成消息,并且getLastKnownLocation在GPS中返回NULL。

我还已经在运行时请求权限,并将其放入清单中。

我的清单中有关于此问题的信息:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-feature android:name="android.hardware.location.gps" />

这是我的MainActivity:

public class MainActivity extends AppCompatActivity {

    private LocationManager myManager;
    private MyLocListener loc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0);

        loc = new MyLocListener();
        myManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        if (myManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loc);
            }
        }
    }

    }

我的听众:

public class MyLocListener implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {

        if (location != null) {
            Log.e("Latitude :", "" + location.getLatitude());
            Log.e("Longitude :", "" + location.getLongitude());
        }
    }
        @Override
        public void onProviderEnabled(String provider){

        }
        @Override
        public void onProviderDisabled(String provider){

        }

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

        }

    }

这样,我无法获得GPS的任何更新,但是正如我所说的,如果我将提供程序更改为NETWORK,它就可以正常工作,并且我会定期在运行时控制台上获取坐标。

可能要考虑的另一件事是,我在不动的情况下并且正在建筑物内进行测试。也许与它有关...我不知道

无论如何,我们将非常欢迎您提供任何帮助或知识!谢谢!

0 个答案:

没有答案