百度定位VS高德定位


 

高德  下載   

添加 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就行了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM