当前位置:   article > 正文

第二十三篇 Android通过原生Api获取经纬度以及百度定位注意点_android 原生gps经纬度坐标和百度地图经纬度

android 原生gps经纬度坐标和百度地图经纬度

Android通过原生Api获取经纬度:

原生定位API只能定位到经纬度,但是如果要定位具体的地址,则需要将经纬度信息发送到谷歌服务器,进行反向地理位置解析,因为目前
国内无法连接谷歌服务器,所以使用原生定位API就不合适了,而且百度定位的功能多又强,非常适合用来定位以及获取地图等.
  • 1
  • 2

工具类:

public class LocationUtils {

    private static Context mContext;
    private static LocationUtils mInstance;
    public static final String TAG = "LocationUtils";

    private LocationUtils(Context mContext) {
        this.mContext = mContext;
    }

    public static LocationUtils getInstance(Context context){
        if (mInstance == null){
            synchronized (LocationUtils.class){
                if (mInstance == null){
                    mInstance = new LocationUtils(context);
                    mContext = context;

                }
            }
            initLocation();
        }
        return mInstance;
    }

    static LocationManager locationManager;
    static Location location;
    static String provider;

    public static void initLocation() {

        locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
        // 获取所有可用的位置提供器
        List<String> providerList = locationManager.getProviders(true);
    if (providerList.contains(LocationManager.GPS_PROVIDER)) {
        provider = LocationManager.GPS_PROVIDER;
    } else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
        provider = LocationManager.NETWORK_PROVIDER;
    } else {
        // 当没有可用的位置提供器时,弹出Toast提示用户
        Toast.LENGTH_SHORT).show();
        LogUtil.d(TAG,"No location provider to use");
        return;
    }

    location = locationManager.getLastKnownLocation(provider);
    /*if (location != null) {
        // 显示当前设备的位置信息
        showLocation(location);
    }*/
    locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);


    }

/**
 * 获取位置信息
 * @return
 */
public static Map<String, String> getLocation() {
    return showLocation(location);
}


public static Map<String, String> showLocation(Location location) {
    if(location == null)return null;
    Map<String, String> map = new HashMap<>();
    map.put("longitude", String.valueOf(location.getLongitude()));
    map.put("latitude", String.valueOf(location.getLatitude()));
    return map;
}

public static LocationListener locationListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        // 更新当前设备的位置信息
        showLocation(location);
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
};

public void remove() {
    if (locationManager != null) {
        // 关闭程序时将监听器移除
        locationManager.removeUpdates(locationListener);
    }
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

百度定位:

如果需要使用百度定位,请到http://lbsyun.baidu.com/location/ 上去选择定位服务,百度定位SDK版本为 v7.3,只需要选择功能开发包
下载-->>选择全量定位功能,点击开发包下载即可,大小只有733kb.

**使用百度定位:**

    1.创建应用-->>Android SDK...


    2.获取开发版和正式版SHA1方法:

    1).正式版SHA1获取:
        打开cmd,输入:keytool -list -v -keystore E:\use-by-me.jks(不需要定位到文件所在位置)
        然后输入自己创建jks数字签名时的密码 这里是:123456



    2).开发版SHA1获取:
        cmd命令(进入.android文件夹下):cd C:\Users\Administrator\.android
        输入:keytool -list -v -keystore debug.keystore

        注意:密码为 android

    **注意点:**
    1)当您选择使用v4.0及之后版本的定位SDK时,需要先申请且配置AK,并在程序相应位置填写您的AK。(选择使用v3.3及之前版本SDK
    的开发者,不需要使用AK).
    2)每个AK仅且唯一对于1个应用验证有效.
    3)若您需要在同一个工程中同时使用Android定位SDK和Android地图SDK,可以使用同一个AK.
    4)Android定位SDK提供了多种CPU架构的so文件(jar通用,只有一个),所以会出现armeabi、arm64-v8a、armeabi-v7a、
    x86、x86_64看起来名称一样重复的.so文件,其实是为了支持多种CPU而准备的。但是BaiduLBS_Android.jar这个jar文件只有一个,
    所以只要将下载的全量定位功能开发包中所有的so以及jar放到工程libs目录下即可。
    5)使用带有室内精准定位的SDK版本时,需增加集成库文件libindoor.so.
    6)新版本的定位SDK,开发者除了要更新jar包之外,同时需要关注so文件是否有更新。如果so文件名称改变,即so文件有更新,开发者
    要及时替换掉老版本,否则会导致定位失败.
    7)室内外网定位成功,室内内网定位失败.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/290495
推荐阅读
相关标签
  

闽ICP备14008679号