NETWORK_PROVIDER不提供更新的位置(NETWORK_PROVIDER not prov

2019-06-21 07:59发布

LocationManager locationManager = (LocationManager)getApp().getSystemService(Context.LOCATION_SERVICE); //getApp() returns my Application object
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 1, 1, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);

这是我用听的代码。 启用GPS,一切工作正常。 不过,如果我关闭GPS,并依靠网络位置,它给了我陈旧的结果 - 在这种情况下,从两天前。 我不能让它更新。 调用getLastKnownLocation返回相同的陈旧的结果。

谷歌地图更新就好了,所以我知道它不是一个硬件/系统配置问题。

我GOOGLE了四周,发现有几个人有类似的问题,但没有答案。 我试着瞄准我的项目API级别8(2.2)以及15(4.0.3)。 相同的结果。 我的手机正在运行ICS。

我也试图消除对GPS_PROVIDER的要求,以及包括getAllProviders的一切要求()。 同样的协议。

任何想法,为什么NETWORK_PROVIDER没有更新? 任何帮助将不胜感激。

(PS不,我不我通常使用的“1,1”我的时间/距离参数,我只是改变了它在调试这一点。)

编辑:我忘了提,是的,isProviderEnabled()返回true。

Answer 1:

我终于找到了一种方法来解决这个问题(见这里我的问题 )。

在我的S3银河迷你情况下出现了类似的症状(无位置更新,直到重新启动...)像上面所描述的。 在大多数情况下位置停止更新时,该设备达到低功耗的条件下,但有时它只是发生,即使手机充满电。 显然,这是某处有问题LocationManager 。 我设法绕过LocationManager通过使用新的谷歌Play中的位置服务API( LocationClient类)。

这大概就是为什么位置更新仍在与谷歌地图合作,因为谷歌地图是使用谷歌游戏服务API,甚至在它被公之于众的原因。

我建议你遵循这个链接 ,显示如何使用播放服务API来获取位置而不是使用方式LocationManager如果遇到这个问题。

Play服务进出口运行位置更新和有类似这样的绝对没有问题了 - 我一直随时接收定期位置更新。

当心 ,这将要求用户必须拥有谷歌发挥自己的设备上安装,所以点燃之类会出来的图片。 它也至少需要的Android 2.2。



Answer 2:

目前,我怀疑这是由不使用造成removeUpdates(listener)上的应用程序停机或活动的OnDestroy。 我已经确定要实现这一点,希望它修复它。 我想不出别的。

- 编辑 - 这并不遗憾的是解决它。



Answer 3:

如果您在新手机的工作,你必须检查,如果你已经接受了在谷歌地图应用中的所有协议 - 否则你将不会收到来自NETWORK_PROVIDER任何更新。



Answer 4:

1)首先您检查是否有给被上述建议的权限。 2),你必须确保Internet在您的手机工作。 3)请找到下面的代码。

public void getLocationByNetworkProvider()
{       
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 10, new LocationListener() {
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub


        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onLocationChanged(Location location) {
         location.getLatitude();                                location.getLongitude();

        }
    });     

}`


Answer 5:

你可以使用这样的更新location.Locationlistener将用于定位工作....

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;

import android.util.Log;

public class MainActivity extends Activity implements LocationListener{

protected LocationManager locationManager;
protected LocationListener locationListener;
protected Context context;
TextView txtLat;
String lat;
String provider;
protected String latitude,longitude;
protected boolean gps_enabled,network_enabled;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

txtLat = (TextView) findViewById(R.id.textview1);

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

@Override
public void onLocationChanged(Location location) {

txtLat = (TextView) findViewById(R.id.textview1);
txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" +      location.getLongitude());

}

@Override
public void onProviderDisabled(String provider) {
Log.d("Latitude","disable");
}

@Override
public void onProviderEnabled(String provider) {
Log.d("Latitude","enable");
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Latitude","status");
}


}


文章来源: NETWORK_PROVIDER not providing updated locations