java无法获取设备位置
我需要在主要活动开始时获取设备的当前位置,所以我使用了位置管理器和所有这些东西。但是我不能得到设备的当前位置,我不知道为什么。在这里我发布了清单权限和我的代码。(完整的堆栈跟踪太长了)
清单
<uses-permission 安卓:name="安卓.permission.ACCESS_COARSE_LOCATION" />
<uses-permission 安卓:name="安卓.permission.ACCESS_NETWORK_STATE" />
<uses-permission 安卓:name="安卓.permission.ACCESS_FINE_LOCATION" />
<uses-permission
安卓:name="com.example.mapexdemo.permission.MAPS_RECEIVE"
安卓:protectionLevel="signature" />
<uses-feature 安卓:name="安卓.hardware.location.gps" />
<uses-feature 安卓:name="安卓.hardware.location.network" />
代码
ActivityCompat.requestPermissions(this, new String[]{安卓.Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Toast.makeText(MainActivity.this, "NO GPS", Toast.LENGTH_LONG).show();
System.out.print("OknO");
} else if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
System.out.print("OK0");
if(ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission
(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
System.out.print("ok01");
} else {
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Location location1 = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location2 = locationManager.getLastKnownLocation(LocationManager. PASSIVE_PROVIDER);
System.out.print("ok011");
if (location != null) {
double latti = location.getLatitude();
double longi = location.getLongitude();
lattitude = String.valueOf(latti);
longitude = String.valueOf(longi);
Toast.makeText(MainActivity.this, "Your current location is"+ lattitude + longitude, Toast.LENGTH_SHORT).show();
System.out.print("OK1");
} else if(location1 != null){
double latti = location1.getLatitude();
double longi = location1.getLongitude();
lattitude = String.valueOf(latti);
longitude = String.valueOf(longi);
System.out.print("OK2");
Toast.makeText(MainActivity.this, "Your current location is"+ lattitude + longitude, Toast.LENGTH_SHORT).show();
} else if (location2 != null){
double latti = location2.getLatitude();
double longi = location2.getLongitude();
lattitude = String.valueOf(latti);
longitude = String.valueOf(longi);
Toast.makeText(MainActivity.this, "Your current location is"+ lattitude + longitude, Toast.LENGTH_SHORT).show();
System.out.print("OK3");
} else {
Toast.makeText(MainActivity.this, "Unable to trace your location", Toast.LENGTH_SHORT).show();
System.out.print("OK4");
}
}
}
# 1 楼答案
用户权限检查后,使用fusedLocationProvider,如
//然后在您的侦听器中或任何您想要获取位置的地方,使用如下提供程序