Articles of locationmanager

getSystemService()如何正常工作?

乍一看下面的代码中,在onCreate(…)完成后, mLocationManager对象应该超出范围,并且预期的行为是onLocationChanged永远不会被调用或调用几次,直到对象被垃圾回收。 但是, getSystemService返回的对象似乎是单例,它存在于MainActivity的范围之外(因为它是一个系统服务,所以恰当如此)) 在进行堆转储并使用Eclipse Memory Analyzer完成后,似乎ContextImpl保留了对LocationManager实例的引用。 在内存转储中有两个对LocationManager对象的引用,而在代码中显然只有一个,这意味着在其他地方创建了另一个引用。 我的问题是: 在调用以下实现时,是否有人完整地描述了正在发生的事情: public abstract Object getSystemService(String name); 是一个懒惰创建的单例返回的对象,创建/保留引用的确切位置是什么? package com.neusoft.bump.client.storage; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.v(“TAG”, “STARTED”); LocationManager mLocationManager = (LocationManager) this […]

GPS Android – 只定位一次

有没有办法访问GPS一次,而不是有一个不断检查位置更新的looper? 在我的场景中,我感兴趣的是find当前的坐标而不是与GPS卫星的连续连接。 有没有人有任何想法如何做到这一点? 提前致谢。

如何阻止位置经理?

不知道为什么,但有时候在关闭应用程序后,LocationManager仍然有效。 我在一个Activity中调用onCreate-Methode中的startGPS()(只有一个,我称之为StartActivity)。 protected void startGPS() { try { lmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); lmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); } catch(Exception e) { e.printStackTrace(); } } 如果此活动将被销毁(因此,当应用程序将关闭时),我调用endGPS() public void endGPS() { try { lmanager.removeUpdates(this); lmanager=null; } catch(Exception e) { e.printStackTrace(); } } 一些想法,一些建议,我做错了什么?!

运行时错误 – java.lang.IllegalArgumentException:provider = gps

我从创build的Android应用程序的用户日志中得到这个错误。 到目前为止,我一直无法复制这个错误。 任何帮助将非常感激。 错误是: java.lang.IllegalArgumentException: provider=gps at android.os.Parcel.readException(Parcel.java:1326) at android.os.Parcel.readException(Parcel.java:1276) at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:646) at android.location.LocationManager._requestLocationUpdates(LocationManager.java:582) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:446) at com.myApp.service.DeviceManager$7.handleMessage(DeviceManager.java:470) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3835) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:883) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) at dalvik.system.NativeStart.main(Native Method) 它引用的设备pipe理器位置是: private final Handler uihandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case […]

LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)不可靠,为什么?

我的应用程序的一个用户报告说,即使他打开了它的应用程序告诉networking的位置closures。 他给我几个屏幕截图,让我思考; LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 工作不正常。 他的手机运行Android 4.1.2,首先我认为这是造成这个问题的原因。 但事实并非如此。 他给了我一个这样的设置的屏幕截图。 然后我Googlesearch,发现这一点 。 这个问题似乎帮助我,但不幸的是答案没有帮助这个案件和提问者没有追求更远。 我的应用程序与位置有关,并已使用LocationManager.isProviderEnabled知道GPS和networking的位置是打开或closures。 我从来没有被告知我的应用程序直到最近才正确地知道这些设置。 他是报告该问题的第一位用户。 我了解到还有另一种方法可以通过查看Secure.LOCATION_PROVIDERS_ALLOWED了解GPS和networking的位置设置。 为了看看这个方法如何在他的手机上工作,我写了一个简单的应用程序,并要求他跑。 这个应用程序做简单的任务,并在屏幕上显示文字 LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { string = "GPS=on\n"; } else { string = "GPS=off\n"; } if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { string += "Network=on\n"; } else { string += "Network=off\n"; } String status = android.provider.Settings.Secure.getString(getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED); if(status.contains("gps")) { string += "GPS=on\n"; […]

为什么不调用Android的onProviderEnabled()方法?

我的Android应用程序有两个位置侦听器,一个用于罚款,一个用于粗略收听。 我希望能够检测到用户何时closures位置服务。 每当我打开我的手机GPS或networking位置服务closuresonProviderDisabled方法按预期调用。 当我打开GPS或networking服务时,onProviderEnabled永远不会被调用! 我已经把下面的一个听众的代码…. 更新中… 我发现这个问题与注销onPause中的监听器有关。 当我删除代码“locationManager.removeUpdates(myFineLocationListener);” 调用onProviderEnabled()方法。 也许禁用(说)GPS的行为自动注销听众? 也许我应该取消注册听众在onDestroy而不是onPause()??? PS。 也许这是相关的,我提到我的活动有一个button,直接进入设备位置设置页面。 它作为一个捷径。 我使用这个快捷方式来禁用/启用位置服务,然后使用后退button返回到我的应用程序。 我将把这个button的代码放在这篇文章的最后。 码: (从onCreate();)调用createLocListeners()方法;) void createLocListeners() { //if null, create a new listener //myFineLocationListener is a class variable if (myFineLocationListener == null) { //Listen for FINE location updates myFineLocationListener = new LocationListener(){ @Override public void onLocationChanged(Location location) { //Do something } […]

通过networking请求位置更新的问题

我已经创build了一个服务,并抓取有关用户的位置数据,所以我可以显示我的用户附近的地方。 除了GPS外,我还希望通过networking跟踪此服务,原因有二:1)GPS可能未启用。 2)GPS需要相当多的时间来locking我的testing手机。 当我的服务执行以下行时: mNETEnabled = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 我得到以下错误: 11-24 14:00:41.693: ERROR/LocationManagerService(51): isProviderEnabled got exception: 11-24 14:00:41.693: ERROR/LocationManagerService(51): java.lang.IllegalArgumentException: provider=network 11-24 14:00:41.693: ERROR/LocationManagerService(51): at com.android.server.LocationManagerService._isProviderEnabledLocked(LocationManagerService.java:1385) 11-24 14:00:41.693: ERROR/LocationManagerService(51): at com.android.server.LocationManagerService.isProviderEnabled(LocationManagerService.java:1359) 为什么是这样? 我是否错过了Manifest的许可? 我的清单中有ACCESS_COARSE_LOCATION。

Android GPS位置的getAltitude()如何工作

您好 我试图实现一个简单的GPS跟踪器。 因此被使用 lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this); 然后我用了 public void onLocationChanged(Location location) { 方法来读取我当前位置的高度。 但我真的不知道什么Location.getAltitude()返回。 文件说它返回高度。 但这是米吗? 或feets? 如果我把手机放在旁边的桌子上,这个值在500和-500之间变化? 这是如何工作的?

要使用Android位置pipe理器权限

我在我的android项目中有以下代码: locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); bestProvider = locationManager.getBestProvider(criteria, false); Location currentLocation = locationManager.getLastKnownLocation(bestProvider); location = currentLocation.getLatitude() + " " + currentLocation.getLongitude(); MyLocation.setText(location); 我得到一个provider == null错误。 我需要使用什么权限? 我的Android清单文件是: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.DuckTag" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".DuckTagActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" […]

每当我要求位置更新时,我应该使用android LocationManager.getBestProvider吗?

我正在使用Google API和MapActivity,MapView等。 当我需要得到我目前的位置时,我第一次使用这个代码: myLocationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE); // Sets the criteria for a fine and low power provider Criteria crit = new Criteria(); crit.setAccuracy(Criteria.ACCURACY_FINE); crit.setPowerRequirement(Criteria.POWER_LOW); // Gets the best matched provider, and only if it's on String provider = myLocationManager.getBestProvider(crit, true); // If there are no location providers available if (provider == null){ OnClickListener listener = new […]