安卓全球定位系统。位置侦听器不想获得修复:(
Posted
技术标签:
【中文标题】安卓全球定位系统。位置侦听器不想获得修复:(【英文标题】:Android GPS. Location Listener does not want to acquire a fix :( 【发布时间】:2011-11-16 09:06:31 【问题描述】:下面是一个假设监听 GPS 更新并向主要活动发送通知的代码
但它似乎不起作用:)
没有错误,只有 onLocationChanged 没有被调用!
有趣的是:当我运行一些其他应用程序来获取 GPS 修复,然后启动我的应用程序 => onLocationChanged 被调用时,只有准确性会降低,最终修复会丢失。
我还尝试将 GPS 侦听器添加到此代码中=> 它可以工作,每秒都会报告视野中的卫星,永远不会获得修复。
这到底是怎么回事? :)
公共类PhoneGPSpos
private Handler myHandler = null;
private LocationManager lm;
private LocationListener locationListener;
private Location currentBest;
Context m_context;
public PhoneGPSpos(Context context, Handler handler)
myHandler = handler;
m_context = context;
lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// Bundle bundle = new Bundle();
// boolean xtraInjection=lm.sendExtraCommand(LocationManager.GPS_PROVIDER,"force_xtra_injection",bundle);
// boolean timeInjection=lm.sendExtraCommand(LocationManager.GPS_PROVIDER,"force_time_injection",bundle);
currentBest = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
locationListener = new LocationListener()
public void onLocationChanged(Location location)
Log.w("Compass", "Loc");
if (location != null)
currentBest = location;
Message msg = new Message();
msg.arg1 = 5;
myHandler.sendMessage(msg);
public void onStatusChanged(String provider, int status, Bundle
extras)
Log.d("Compass", "Stat");
public void onProviderEnabled(String provider)
Log.d("Compass", "Prov e");
public void onProviderDisabled(String provider)
Log.d("Compass", "Prov d");
;
public void requestGPS()
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
Log.d("Compass", "gps requested");
public void stopGPS()
Log.d("Compass", "gps stopped");
lm.removeUpdates(locationListener);
public synchronized Location getBest()
return currentBest;
【问题讨论】:
你在哪里测试?室内? 不是。正如我所说:“其他应用程序能够得到修复”。当我在调用 onLocationChanged 之后切换回我的应用程序时,只有准确性会降低。而修复最终会丢失 【参考方案1】:好的,发现这是其他人也看到的问题:显然(至少在某些手机上)如果相机处于活动状态,GPS 监听器的工作效果会更差。
Problem with getting GPS data when using CameraPreview
android: Losing GPS signal strength on some phones when I start up the Camera and SurfaceView
Camera Preview and GPS reading in Android
为 http://code.google.com/p/android/issues/detail?id=20098 创建了 Andorid 问题
如果有人有解决方案请分享
【讨论】:
请务必接受您自己的答案,以便其他人可以快速找到您的解决方案。 我在同时请求网络位置时看到了这种情况。现在正在尝试找到与此相关的 SO 问题,以防有人有解决方法...【参考方案2】:Check for permissions in your projects AndroidManifest.xml file
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
【讨论】:
GPS_PROVIDER 不需要互联网许可。 FINE 位置在。COARSE 不是。我没有使用网络。我只需要GPS【参考方案3】:你在哪里测试?在室内? 其他应用程序使用哪些提供商?网络提供商?
我的猜测是,正在运行的应用程序使用网络提供商,并且由于您是最后一个已知的,它会从以前的应用程序位置 ping 返回该位置。网络提供商通过提供大致位置来帮助分配 gps 卫星。因此,当您启动应用程序时(在运行其他应用程序之后),您有卫星,但是(因为您可能在室内)没有网络,您可能会一点一点地丢失卫星,从而降低准确性。
故事的寓意:也使用网络提供商,或者确保您可以清楚地看到天空来测试 gps。
【讨论】:
不是。正如我所说:“其他应用程序能够得到修复”。当我在调用 onLocationChanged 之后切换回我的应用程序时,只有准确性会降低。而修复最终会丢失 所以当你调试这个应用程序时,你是在外面的天空清晰的视野中吗? 是的。 1)我启动我的应用程序。 2) 等待 ~ 10 分钟 - 无修复。3) 启动 GPS 状态。在几分钟内得到修复 4) 再次运行我的应用程序。 5)查看它如何以降低的准确性报告位置。 6)一段时间后修复丢失以上是关于安卓全球定位系统。位置侦听器不想获得修复:(的主要内容,如果未能解决你的问题,请参考以下文章
我可以从侦听器内部引用 OnClickListener 的按钮吗? (安卓)
一旦您调用取消注册位置侦听器,Gps 状态侦听器就会停止运行