【发布时间】:2013-08-12 19:54:52
【问题描述】:
我正在尝试编写一个从“网络”提供商获取当前位置的 Android 应用程序(所以我应该只需要 android.permission.ACCESS_COARSE_LOCATION 权限)。这在某些设备上运行良好,但在其他设备上我似乎无法获得位置更新。这是我的代码。
在 onCreate 中:
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
provider = LocationManager.NETWORK_PROVIDER;
Log.v (TAG, "Finding location from provider: " + provider);
if (CHECK_PROVIDER_ENABLED && !locationManager.isProviderEnabled (provider))
{
Toast.makeText (this, "Location provider disabled", Toast.LENGTH_LONG).show ();
}
else
{
try
{
Location location = locationManager.getLastKnownLocation(provider);
if (location == null)
{
Log.i (TAG, "getLastKnownLocation returned null, requesting updates when available");
locationManager.requestLocationUpdates (provider, 0, 0, locationListener);
}
else
locationListener.onLocationChanged (location);
}
catch (IllegalArgumentException e)
{
Log.e(TAG, "Failed to get location from provider " + provider, e);
Toast.makeText (this, "Location provider disabled", Toast.LENGTH_LONG).show ();
}
}
locationListener 定义如下:
private LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged (String provider, int status, Bundle extras)
{
}
@Override
public void onProviderEnabled (String provider)
{
}
@Override
public void onProviderDisabled (String provider)
{
}
@Override
public void onLocationChanged (Location location)
{
Toast.makeText (CarouselViewerActivity.this, "" + location.getLatitude () + ", " + location.getLongitude (), Toast.LENGTH_LONG).show ();
Log.v(TAG, "" + location.getLatitude () + ", " + location.getLongitude ());
locationManager.removeUpdates (this);
}
};
在正常工作的手机上,这里一切正常:如果 CHECK_PROVIDER_ENABLED 为真,isProviderEnabled 测试返回真,getLastKnownLocation 返回一个位置而不是空值,如果我强制要求更新,我会收到一个详细信息一个位置。
但在其他手机上(我正在测试的特定手机是带有 Cyanogenmod 9 的 Galaxy S2)isProviderEnabled 测试返回 false(尽管启用网络位置的设置项已打开 - 请参阅 LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) is not reliable, why?此问题的摘要),getLastKnownLocation 返回 null,并且在请求更新后我没有在合理的时间内收到更新(我已经等了 5 分钟)。
我采用的方法有问题吗?除了启用此功能所需的网络位置之外,还有其他方法可以获取我需要的网络位置,或者手机上的某些设置吗?在更基本的层面上,这里到底出了什么问题?
【问题讨论】:
-
您是否检查过该特定版本的 cyanogenmod 9 和 Galaxy s2 是否存在错误?全球定位系统是否适用于地图等其他应用程序?还有其他明确的方法可以将 gps 功能添加到 xml 中,这可能会有所帮助。所有考虑到这一点的人似乎确实是这个特定的 rom 和手机的问题。
-
其他应用程序肯定可以让它工作,所以我不认为这是一个具体的问题,我相信一定有解决方案。