【发布时间】:2019-01-23 10:04:15
【问题描述】:
我需要在主要活动开始时获取设备的当前位置,所以我使用了位置管理器和所有这些东西。但我无法获得设备的当前位置,也不知道为什么。在这里,我发布清单权限和我的代码。 (完整的堆栈跟踪是如此之长)
清单
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission
android:name="com.example.mapexdemo.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-feature android:name="android.hardware.location.gps" />
<uses-feature android:name="android.hardware.location.network" />
代码
ActivityCompat.requestPermissions(this, new String[]{android.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");
}
}
}
【问题讨论】:
-
如果设备位置未知,
locationManager.getLastKnownLocation()调用将返回null。并且不一定知道最近是否没有应用程序(包括您的应用程序)请求位置更新。即使它返回一个位置,它也可能不是最新的。 -
哪里失败了?它是在权限上失败还是您根本没有在您的位置中获取任何数据?
-
@JesperPurup 如果我检查纬度和经度,它们是空的
-
@MarkusKauppinen 抱歉,我不太理解您的评论