添加 AMap_Location jar包,在AndroidManifest 添加權限,並在 application下 添加申請到的 key
這里還可以添加service,不過我發現不添加也沒有影響
<service android:name="com.amap.api.location.APSService"></service>
之后就可以使用定位了,定位得到的 AMapLocation 對象 直接tostring就能得到所有的定位信息。
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationListener; public class LocationActivity extends AppCompatActivity { private TextView tv; public AMapLocationClient LocationClient = null; public AMapLocationListener LocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { tv.setText(aMapLocation.toString()); } } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location); tv = (TextView) findViewById(R.id.tv); LocationClient = new AMapLocationClient(getApplicationContext()); LocationClient.setLocationListener(LocationListener); } public void btn(View view) { switch (view.getId()) { case R.id.btn1: LocationClient.startLocation(); break; case R.id.btn2: LocationClient.stopLocation(); break; } } }
百度定位的sdk 除了jar包還有so庫,所以添加的東西要比高德多。
在AndroidManifest 添加權限,並在 application下 添加申請到的 key,而百度這里必須添加service
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
之后就可以定位了
這里比高德稍微麻煩一點,還要配置定位SDK參數 LocationClientOption,不然最多只能拿到經緯度,而獲取不到具體信息
而且獲取到的 BDLocation 對象,不能tostring,只能按需求取數據
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; public class BaiduActivity extends AppCompatActivity { private TextView tv; private LocationClient locationClient = null; private BDLocationListener bdLocationListener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { if (null != bdLocation && bdLocation.getLocType() != BDLocation.TypeServerError) { tv.setText(bdLocation.getLocType() + bdLocation.getAddrStr() + " " + bdLocation.getBuildingName() + " " + bdLocation.getDistrict() + " " + bdLocation.getFloor() + " " + bdLocation.getStreet() + " " + bdLocation.getTime() ); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_baidu); tv = (TextView) findViewById(R.id.tv); locationClient = new LocationClient(getApplicationContext()); locationClient.registerLocationListener(bdLocationListener); LocationClientOption clientOption = new LocationClientOption(); clientOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); clientOption.setCoorType("bd09ll"); clientOption.setIsNeedAddress(true); clientOption.setIsNeedLocationDescribe(true); clientOption.setIsNeedLocationPoiList(true); locationClient.setLocOption(clientOption); } public void btn(View view) { switch (view.getId()) { case R.id.btn1: locationClient.start(); break; case R.id.btn2: locationClient.stop(); break; } } }
簡單對比
Sdk大小 |
難易 |
模擬器 |
文檔 |
室內 |
位置提醒 |
同步異步 |
|
百度 |
511 KB |
適中 |
支持 |
詳細 |
支持 |
支持 |
異步 |
高德 |
259 KB |
簡單 |
貌似不支持 |
詳細 |
有另外的室內定位sdk |
不支持 |
開啟定位異步 關閉定位同步 |
值得一提的是 高德在直接LocationClient.stopLocation() 時,會明顯卡頓,說明阻塞了主線程,還是開新線程關閉好
獲取key的方法
打開cmd,定位到.android文件夾下,輸入cd .android
keytool -list -v -keystore C:\AndroidProject\demonkey.jks
然后輸入密碼 復制sha1就行了