基于网络定位的问题

shikezhan 2012-07-30 10:49:58
想实现一个定位的功能,用GPS可以实现了,但是使用网络来定位却遇到了一点问题.
先贴代码:

private LocationManager locationManager;
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
......
}
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this);


运行到isProviderEnabled方法是总是返回false,即使我把gprs,gps,wifi都打开了还是如此.
而且运行后总是会调用LocationListener的public void onProviderDisabled(String provider) 方法,并没有调用public void onLocationChanged(Location location)方法

有人知道原因吗?

非常感谢!
...全文
420 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
shikezhan 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

你确定都关了还能定位???都关了可以获得基站信息,但是通过基站信息定位是需要访问网络的,如果你确定百度地图给你的不是上一次的定位信息的话
[/Quote]

确实是可以,我系统的版本是2.3.6的好像。另外我不开gprs的情况下也是可以收彩信的,是否跟这个有关?
谢谢!
hvk687 2012-08-07
  • 打赏
  • 举报
回复
你可以用
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.getProviders(true),
去看看返回的list中有没有LocationManager.NETWORK_PROVIDER,
nyjsl 2012-08-07
  • 打赏
  • 举报
回复
你确定都关了还能定位???都关了可以获得基站信息,但是通过基站信息定位是需要访问网络的,如果你确定百度地图给你的不是上一次的定位信息的话
shikezhan 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

我已经说了那个定位没啥用
[/Quote]

怎么会没用?我感觉应该也是能定位的,只是定位的结果误差会大一点。
另外,我用百度地图的时候我把gprs,gps,wifi全部关闭了,还是能定位,结果还不错,误差100m左右。
nyjsl 2012-08-06
  • 打赏
  • 举报
回复
我已经说了那个定位没啥用
shikezhan 2012-08-06
  • 打赏
  • 举报
回复
我已经说了用GPS定位是可以的,程序可以正常,也能获取数据。
试了下用LocationManager.NETWORK_PROVIDER 就不行。
对于comeoverjava的回复,有两个疑问:
1.LocationManager.NETWORK_PROVIDER和手机GPRS定位是一回事吗?如果不是一回事,那LocationManager.NETWORK_PROVIDER是用来干嘛的?

2.关于public void onLocationChanged(Location location)方法,如果我在注册时:locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this);指定了第二个参数的值,应该是无论位置有没有变化,每间隔1000毫秒onLocationChanged方法都会执行一次
深夜深几许 2012-08-02
  • 打赏
  • 举报
回复
在一个网络定位是手机GPRS定位,是从google服务器取得的gson数据,定位包括,gps定位,基站定位,网络定位的
深夜深几许 2012-08-02
  • 打赏
  • 举报
回复

public void onProviderDisabled(String provider)

方法的意思是,定位服务不能用,比如gps定位,network定位,在GPS中有一个方法是可以取得最佳的定位的,方法也是有个provider的,



并没有调用public void onLocationChanged(Location location)方法

这个方法是当用户定位的位置发生改变的时候才会触发的,楼主,你还是去网上多找些例子看看的
jiangyue2780 2012-08-01
  • 打赏
  • 举报
回复
isProviderEnabled(LocationManager.GPS_PROVIDER)
你有没有试过?
nyjsl 2012-08-01
  • 打赏
  • 举报
回复
这个定位没啥用,基站定位是基于基站信息的,可以获得手机信息访问google的解析器来获得基站信息进行定位
hzyidu58 2012-08-01
  • 打赏
  • 举报
回复
网络定位分基站和WIFI,如果在同一个基站的范围,定位数据肯定一样,WIFI也类似
j_f0001 2012-08-01
  • 打赏
  • 举报
回复
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this);这块设置成了只使用基站定位,你设置成GPS定位试试
j_f0001 2012-08-01
  • 打赏
  • 举报
回复
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this);
你这块只设置了通过基站定位,把它设置成GPS定位试试,肯定可以了
KPRF2009 2012-07-31
  • 打赏
  • 举报
回复
哈哈,和我当时一样,忘记加限权了
AMinfo 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

加行这个试试
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

加了还是不行,郁闷了...
[/Quote]

手机上在设置里面是否开启了模拟地点?

方法:设置 -> 应用程序设置 -> 开发 -> 允许模拟地点
shikezhan 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

加行这个试试
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
[/Quote]
加了还是不行,郁闷了...
chenzr83 2012-07-31
  • 打赏
  • 举报
回复
加行这个试试
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
shikezhan 2012-07-30
  • 打赏
  • 举报
回复
对了 已经添加了一下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧