您的位置:首页 > 移动开发 > Android开发

【转载】如何开启Android的虚拟GPS功能

2010-02-09 11:21 567 查看
本文转载自www.madhome.org开发论坛

为了构建一个依靠程序的定位程序,或者来测试你程序对于方位的可操作性。使用Android模拟器将会使你很方便的来进行当前定位并手动设置你的位置。

这篇文章将教你如何在Google Android模拟器上设置虚拟的GPS的一些步骤。

在AndroidManifest.xml中设置许可:

1 <USES-PERMISSION android:name="android.permission.ACCESS_MOCK_LOCATION"></USES-PERMISSION>

为你的Android模拟器找到正确的本机端口:
$ adb devices
List of devices attached
emulator-5554 device

在这个案例中我们,我们搜寻的端口为5554。现在通过telnet(用于远程联接服务的标准协议或者实现次协议的软件)来进行远程登陆。
$ telnet localhost 5554
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: type 'help' for a list of commands

手动设置你首选的地址:用geo fix指令来设置定位:
geo fix $longitude $latitude

例如巴塞罗那的市中心
geo fix 2.169919 41.387917
OK

为了获取你所需的经度和纬度,你只需转到http://maps.google.com/,把期望地址移动到你屏幕的中央位置,并在地址栏中输入JavaScript指令:

1 <JAVASCRIPT:VOID(PROMPT('',GAPPLICATION.GETMAP().GETCENTER()));></JAVASCRIPT:VOID(PROMPT('',GAPPLICATION.GETMAP().GETCENTER()));>

需要注意的是:你从Google Maps上获取的坐标格式是($纬度,$经度)——但你进入Android geo fix时,却是经度和纬度变换过的位置。

确保一切正常运行:
在你的模拟器上打开Google Maps程序。它应该会把你直接引到你输入的位置并显示一个蓝色闪烁光。
在你的程序中,访问Android 定位服务

01 LocationManager mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
02 Location myLocation = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
03 Double myLatitude = myLocation.getLatitude();
04 Double myLongitude = myLocation.getLongitude();
05 Log.i(TAG, "My location INIT: " + myLatitude + " | " + myLongitude);
06 Geocoder geocoder = new Geocoder(this);
07 java.util.List<address>
08 addressList;
09 try {
10 addressList = geocoder.getFromLocation(myLatitude, myLongitude, 5);
11 if(addressList!=null && addressList.size()>0) {
12 String address = new String();
13 Log.i(TAG,addressList.get(0).toString());
14 address = addressList.get(0).getAddressLine(0) + ", "
15 + System.getProperty("line.separator")
16 + addressList.get(0).getAddressLine(1) + ", "
17 + addressList.get(0).getAddressLine(2);
18 ((TextView)findViewById(R.id.CurrentLocation)).setText(address);
19 }
20
21 } catch (IOException e) {
22 e.printStackTrace();
23 }

温馨提醒:
• 我个人注意到有时候手动进入定位无效。目前我还不知道这个原因,但现在的某个工作区就是只是通过geo fix指令重新输入指令。
• 如果你搞不清纬度和经度的话,我再重申一下: 纬度:东<>西走向 (你可以想象一下中国伟大的长城,它就是东西走向的^_^);经度:南<>北走向。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: