Articles of locationmanager

LocationManager:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序

通常在我想到的另一个线程的UI线程上做某事时出错,但我不知道我做错了什么。 该错误似乎只出现在手机行驶时,因此GPS位置不断变化。 我希望存储最新的位置,因此UI上没有任何内容。 我从主要活动调用了以下方法: public void getFreshDeviceLocation(long interval, final long maxtime) { if (gps_recorder_running){return;} gpsTimer = new Timer(); //starts location startMillis=System.currentTimeMillis(); // receive updates for (String s : locationManager.getAllProviders()) { LocationListener listener=new LocationListener() { @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } @Override public void onLocationChanged(Location location) { // […]

取消订阅LocationManager中的LocationListener

如何取消订阅LocationListener以接收来自LocationManager更新? 这是我如何设置它 mLocationManager = (LocationManager)this.getSystemService(LOCATION_SERVICE); mListener = new LocationListener() { public void onLocationChanged(Location location) { Log.i(“LocationListener”, “Logging Change”); } } mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, mListener); 退出创建LocationListener的视图后,我仍然在LogCat窗口中收到日志消息。 我理解这是因为我正在孤立侦听器,但我在LocationListener上看不到任何destroy方法,也无法在LocationManager对象上看到任何“删除侦听器”样式方法。

将LocationManager作为服务Android启动

我正在尝试做的是在收到c2dm消息时,启动一个服务,询问位置“x”的时间,然后将该位置移交给我们的服务器。 c2dm消息正确启动服务,GPS位置打开,但它永远不会更新。 它只是坐在那里我指定的时间长度(目前为12秒)并没有做任何事情。 我在我的应用程序中使用完全相同的代码(不是作为服务)并且它完美地工作。 我究竟做错了什么? 这会在收到c2dm消息时启动服务。 context.startService(new Intent(context, ServicePingLocation.class)); 这是服务本身的代码。 所有被称为“onCreate”和“onStart”的东西。 public class ServicePingLocation extends Service implements LocationListener { private final String DEBUG_TAG = “[GPS Ping]”; private boolean xmlSuccessful = false; private boolean locationTimeExpired = false; private LocationManager lm; private double latitude; private double longitude; private double accuracy; @Override public void onLocationChanged(Location location) { Log.d(DEBUG_TAG, […]

为什么locationmanager使用新的gettime-timestamp返回旧的位置修复?

我们有一个应用程序,在用户操作尝试获取位置修复。 它可以在GPS和网络上进行监听,并且具有基于时间/准确度的决策矩阵,以确定何时停止收听以及返回什么修复。 我们偶尔会注意到一种非常奇怪的行为。 我们使用经典的方式来查看修复程序的年龄,如下所示: long age = now – newLocation.getTime(); if(age >= prefs.getLocationMaxAge()){ Log.d(TAG, “location too old.”); return; } 但有时候,根据返回的时间戳,从操作系统返回的location.getTime的年龄大概可能是15-20秒,尽管我们可以确定它已经很老了。 例如,如果经度/纬度修正来自手机30分钟前的位置! 它似乎既发生在Wi-Fi和网络上,也不发生在GPS上。 对我来说,这完全是疯了。 有没有其他人看过这个,有什么办法吗? 我们已经在几款不同的手机上使用它,最近的一款是三星Galaxy S II 。 非常欢迎帮助。 编辑 :要非常清楚,问题是操作系统调用“onlocationchanged”回调,时间戳可能是几秒钟,当我确定“新”中的经度/纬度时修复是手机至少没有停留30分钟的地方。 这使得很难准确地确定手机的位置……

Android位置getBearing()始终返回0

我一直在尝试为我的Android应用程序实现一项function,无论设备指向何处,都可以获得设备的移动速度和方向。 例如:如果我的Android设备指向北方向,如果我向南方向向后移动,则返回我正在向南移动。 我一直在环顾四周,我想出了使用Location的getBearing()方法的可能性(仍然,我不知道这是否能解决我的整个问题)。 当我调用getBearing()时,由于某种原因它总是返回0.0。 我不知道为什么。 这是我的代码: LocationManager lm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gcm); setUpUI(findViewById(R.id.LinearLayout1)); isRegged = false; // GCM startup gcm = GoogleCloudMessaging.getInstance(this); context = getApplicationContext(); gps = new GPSTracker(context); // gps.startListening(context); // gps.setGpsCall(this); /* * Variables to indicate location and device ID */ TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (gps.getIsGPSTrackingEnabled()) { […]

什么位置提供商“被动”? 在Android 2.2上看到HTC Desire

在我进入基于位置的模式之前,我通过调用检查是否存在任何位置提供者 List android.location.LocationManager.getProviders(boolean enabledOnly) //enabledOnly = true 并检查结果列表的大小。 现在我在Android 2.2的HTC Desire上测试了我的应用程序。 系统设置不允许任何位置跟踪(GPS和移动设备已关闭)。 但是,返回的列表有1个条目,其值为“被动”。 它是什么? 我可以使用它吗? 提供商似乎很慢/不工作。

Android LocationManager标准

我需要从网络和GPS提供商处接收位置更改。 如果GPS提供商不可用或没有位置(卫星可见性差),我会从网络提供商处接收来自GPS提供商的位置。 是否有可能根据我的需要选择使用标准?

在locationManager.removeUpdates()之后,通过将locationManager设置为null,GPS图标仍然闪烁

我正在开发位置跟踪应用程序。 但我停止通过做两件事来获得位置更新…… locationManager.removeUpdates(本); 和 将locationManager引用设置为null。 这将停止获得我想要的位置坐标… 但问题是gps图标仍然闪烁..这将耗尽设备的电池。 所以请帮我停止这个GPS修复…

是否有替代Location Client(Google Play API)?

我在使用位置数据的应用程序上工作,它需要在中国工作。 此处销售的Android设备基本上没有安装Google Play API,唯一的方法是根据手机安装它。 所以我坚持使用LocationManager,它比LocationClient(Google Play API的一部分)更糟糕。 我的问题是,当从GPS_PROVIDER读取时,LocationManager经常无法连接到足够的卫星(在中国),并且修复之间偶尔会有很大的时间间隔。 从NETWORK_PROVIDER读取时,我可以获得更频繁的修复,但准确度范围从30到500.无法接近LocationClient API质量。 该应用程序应该经常监视您在街道上的移动,例如。 每秒更新一次(高电量使用,对我的客户来说不是问题)并在到达某些位置时执行某些操作。 如果我使用Google Play API和LocationClient,它确实运行良好。 但这仅限于Nexus4或某些非中国Android设备。 我问是否有人知道一个库可以提供比直接使用LocationManager更好的结果,或者一个解决方案如何使用LocationManager来改善结果?

如何在Android中获取位置管理器的最后已知位置?

我使用简单的位置管理器对象来获取设备的lastKnownLocation()但是获得null对象的回报可以告诉我为什么? 代码: public Location getLocation() { LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); if (locationManager != null) { Location lastKnownLocationGPS = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (lastKnownLocationGPS != null) { return lastKnownLocationGPS; } else { Location loc = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); System.out.println(“1::”+loc);—-getting null over here System.out.println(“2::”+loc.getLatitude()); return loc; } } else { return null; } } @Override protected void onCreate(Bundle savedInstanceState) { […]