2013-02-04 141 views
1


经过长时间的努力,在面对problem获取用户当前的GPS定位。

因此,我认为如果我们能够以某种方式通过预安装的Google地图应用程序的Current Location修补程序以编程方式获取位置修复程序?

如果我能够获取背景中的位置坐标..这可能吗?
那么,是不是可以通过使用意图或广播接收器以某种方式获取当前位置坐标(假设地图应用程序是广播吧..?)如何从Google地图应用程序获取用户当前的GPS位置?

更新#2: Finally..I得到它的工作..

更新:我前面的代码是here(引擎收录链接)

任何意见,欢迎.. 谢谢..

+0

我没有得到你的问题......你想通过GPS获取用户的当前位置?如果是,那么它的“非常简单”:使一个类从LocationListener扩展并覆盖onLocationChanged方法。您是否已将您的MD5 API密钥用于Google地图? – mthama

+0

@mthama是和是..:D Infact这里是我的[原问题](http://stackoverflow.com/questions/14692202/unable-to-get-current-gps-location-co-ordinates)。我已经完成了演习:D keystore..console..api key.pftt:p我缺少某处某处..或很可能..my电话被窃听:但是,在这个世界怎么样?我的手机的谷歌地图应用程序可以锁定到GPS卫星上吗? :哦,顺便说一句,你是否尝试过在HTC渴望上获得GPS锁?或者在基于android 2.3.3的设备上播放它? :| (实时..没有DDMS thingy) – beerBear

+1

你的代码是复杂的,看看有什么不正确的。我只能说你可以使用Criteria,也可以在没有它的情况下请求GPS_PROVIDER。而“getMyLocation”是不好的类名。 Java中的类名应以大写字母开头,且不能是动词。getMyLocation是一个很好的方法名,但是类应该被命名为LocationRetreiver或者其他东西:)并且记住要获得一个你可能希望在外面的GPS解析修复,或者更好地使用FakeGPS https://play.google.com/store/ apps/details?id = com.lexa.fakegps - 如果一切正常,你应该马上得到定位。 –

回答

0

可以使用无源定位提供商,但它母鹿并不是明确表示它会从GoogleMaps中获取位置。此外,GoogleMaps应该正在运行以便接收更新。 要从GoogleMaps接收位置更新,您还必须拥有ACCES_FINE_LOCATION权限。此外,您无法启动GoogleMaps并强制它在没有用户交互的情况下更新位置。如果您需要精确的用户位置,除了使用GPS_PROVIDER之外别无它法。

http://developer.android.com/reference/android/location/LocationManager.html#PASSIVE_PROVIDER

你也可能需要阅读 http://developer.android.com/guide/topics/location/strategies.html http://developerlife.com/tutorials/?p=1375

+0

好吧..我从网络获得位置就好了(实际上并没有真的把这个代码放在SO上),但我更倾向于获得一个精确的位置修正,而不是800 mtrs/fts的精度。 :(是不是有一种方法可以在后台运行Google地图(在异步任务中获取共同作品?:D),并在Google地图获得卫星修复后,以某种方式从地图获取地理修复,并将其反映到我的应用程序?:| – beerBear

+0

已更新答案。 –

+0

我已经在我的其他*代码(如禁用轴承和高度,甚至将功率要求设置为high ..但很遗憾,只是让我网络修复:(没有GPS(在该代码中,即使GPS图标也不闪烁......不可见,但是当我检查通知区域中的GPS复选框时)。选中(我在尝试地理位置之前明确激活了打开GPS的意图修复))。 – beerBear

2

好的密码破译,这里是我如何实现我的位置提取程序:

// the listener to listen to the locations 
private LocationListener listener = null; 
// a location manager 
private LocationManager lm = null; 
// locations instances to GPS and NETWORk 
private Location myLocationGPS, myLocationNetwork; 

// instantiates fields 
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
myLocationNetwork = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
myLocationGPS = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
listener = new myLocationListener(); 

// the listener that gonna notify the activity about location changes 
public class myLocationListener implements LocationListener { 
    @Override 
    public void onLocationChanged(Location location) { 
     // "location" is the RECEIVED locations and its here that you should proccess it 

     // check if the incoming position has been received from GPS or network 
     if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      lm.removeUpdates(this); 
     } else { 
      lm.removeUpdates(listener); 
     } 
    } 
    @Override 
    public void onProviderDisabled(String provider) { 
     lm.removeUpdates(this); 
     lm.removeUpdates(listener);   
    } 
    @Override 
    public void onProviderEnabled(String provider) { 
    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
} 

正如你所看到的,有没有这么很多技巧。在您实例化侦听器时,您应该会看到Android设备顶部的GPS图标。此外,只要您的位置发生变化(即随着您的设备走动),OnLocationChanged方法将被调用。

另外,有趣的是,如果你只想得到你的位置,有几种方法可以做到这一点,然后以不同的回报速度和不同的疾病。请检查GoogleGLM(请求http://www.google.com/glm/mmap,返回json编码与您的位置一致)服务,三角测量和网络位置。在上面的片段中,我展示了如何通过GPS和网络获取位置。希望它有一些帮助... :)

+0

在行'if(lm.isProviderEnabled(LocationManager.GPS_PROVIDER)&&(isNetOrGPs%4 == 0)){'this:'isNetOrGPs%4 == 0' ?我以前的代码是[这里 - PasteBin Link](http://pastebin.com/Wm6h9VFV) – beerBear

+0

你可以忽略它。对不起:我从我的项目中复制/粘贴片段并错过了这件小事。 :) – mthama

+0

最重要的部分是重写OnLocationChanged。您可以使用Toast.makeText方法来烘烤您的位置作为反馈。 ;) – mthama

相关问题