我试图获得该位置的价值。 我调试代码,我看到,在我得到位置后 - android studio没有将值返回到主要活动
我看到代码上没有异常。
方法'getCurrentLocation'返回位置。 从gps / network获取位置后(在调试查看器的正确位置),我看到代码就行了
'if (!isGpsEnable && !isNetworkEnable) {'
并在'location'上返回null 变量即使'location'变量包含正确的gps位置。
代码:
public class TraceLocation implements LocationListener
{
public Location getCurrentLocation(Context context)
{
Location location = null;
try {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Boolean isGpsEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Boolean isNetworkEnable = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGpsEnable && !isNetworkEnable) {
// TODO !!! => no gps and no network !!!
} else if (context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
if (isNetworkEnable) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 10, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
}
if (isGpsEnable) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
}
}
}
catch(Exception e)
{
}
return location;
}
问题:
我使用的是android 6.0(marshmallow)
为什么当方法返回时我的结果为null,即使我看到调试的返回值不为null
当我删除
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,60000,10,this);
和
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, this);
我也没有得到调试的位置 - 为什么?????
答案 0 :(得分:1)
根据您提供的说明,我觉得您还没有完全实现原生Android位置机制所需的功能。
Android中的位置提供程序以异步方式工作,因此您必须注册一个侦听器,该侦听器将在生成位置更新时得到通知。
您无法期望系统立即响应(除非您使用getLastKnownLocation(String provider)
方法here)。
您的课程包含implements LocationListener
,这应该强制您实施一系列方法,包括onLocationChanged(Location location)
。
这种方法是在获得位置时将被触发的方法;您可以检查location
对象以查看其来源(无线或GPS)和其他数据(速度,准确度等)。
查看官方指南以了解更多详情here。 由于您的调试操作是处理从环境(GPS和无线网络)收集的数据,因此系统的行为将取决于这些变量。