????? 关于Android的位置访问,包含两部分,一个是通过GPS模块,获取位置信息,另外一个是调用GOOGLE MAP的API,显示位置信息。目前的需求,主要还是获取地址信息,这样可以通过与服务器的交互,获取与位置相关的信息。
????? 首先需要得到获取地址信息的软件许可:
???? AndroidManifest.xml文件中加入:
???? <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
???? 注意:很多帖子对于permission的位置说了很多,有的说需要放在application节点里面之类的,其实放在外面是可以生效的。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="20101219" android:versionName="alpha 0.3"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".activity.CameraActivity" /> </application> <uses-sdk android:minSdkVersion="6" /> </manifest>
??????? 有了许可,获取地址信息就很简单了。通过工厂方法获取LocationManager对象,并加入监听。
??
locationManager = (LocationManager) this.context .getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
?
??????? 接听类,需要实现LocationListener接口。实现接口方法,其中只有一个是获取地址信息的方法onLocationChanged。
public void onLocationChanged(Location location) { try { if (location != null) { JsRunHelper helper = new JsRunHelper(); helper.appendJs(sucessCallBack + "(\"" + location.getLongitude() + "\", \"" + location.getLatitude() + "\");"); } } finally { locationManager.removeUpdates(this); } } public void onProviderDisabled(String provider) { } public void onProviderEnabled(String provider) { } public void onStatusChanged(String provider, int status, Bundle extras) { }
??? 记得在获取完地址信息后,调用removeUpdates方法,移除对于位置信息的监听。