0

我已经尝试过 GPS 和网络提供商,但它们为 getLastKnownLocation 提供了空位置。我也没有得到任何 onLocationChanged 。我正在我的公寓里尝试,那里的手机信号很强。我什至可以很好地浏览互联网并从市场上下载和安装应用程序。

我已经阅读了一些关于同一主题的主题,但他们的建议似乎我已经尝试过了。

这是我的代码片段。

 public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    if(null == locationManager) {
        Log.d(TAG, "location manager NULL");
    }
    geocoder = new Geocoder(this); 

    // Initialize with the last known location
    Location lastLocation = locationManager
            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
    if (lastLocation != null)
        onLocationChanged(lastLocation);
    else
        Log.i(TAG, "null LastKnownLocation");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    super.onStartCommand(intent, flags, startId);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
            0,0, this);
    Log.d(TAG, "requested location updates");

    return START_STICKY;
}

根据日志:

mitenm@pinkydebian:/media/sf_E_DRIVE/tmp$ adb logcat LocationNotifierService:* *:S
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
I/LocationNotifierService(30866): null LastKnownLocation
D/LocationNotifierService(30866): gps provider enabled:true
D/LocationNotifierService(30866): network provider enabled:true
D/LocationNotifierService(30866): onCreate
D/LocationNotifierService(30866): requested location updates
D/LocationNotifierService(30866): requested location updates
D/LocationNotifierService(30866): requested location updates

我有“解锁接收器”,所以当我解锁我的屏幕时,我请求位置更新,这在日志中按预期工作。但是 onLocationChanged 方法没有被调用。

我已经添加了显示精细和粗糙的权限。

问候,

米腾。

4

1 回答 1

0

android getLaskKnownLocation null

根据谷歌文档

getLaskKnownLocation 返回一个 Location 指示从给定提供程序获得的最后一个已知位置修复的数据,否则返回 null。

这意味着它显示了缓存的数据。如果您在以前从未查询过位置数据的设备上运行应用程序,那么缓存将是空的,这就是您获得 null 的原因。

也不要得到任何 onLocationChanged 。

确保您已启用网络提供商的位置。

使用下面的片段。

if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected() || connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).isConnected()) {

    if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        Constants.CONNECTED = true;

        locationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, 5000, 1, this);
    } else {
        Constants.CONNECTED = false;

        Toast.makeText(
        context, "Please enable Wireless networks in Location Setting!!", 10000).show();
    }

}
于 2012-06-22T10:25:13.527 回答