首页 > 代码库 > 百度定位VS高德定位

百度定位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就行了

 

百度定位VS高德定位