• Android定位实现(baidu)


      在上一篇中讲到了使用google 提供的API来获得 地理位置信息, 但由于google被禁的原因,所以无法进行反地址编码,所以, 无法获得详细的地址信息,所以,这里转向了baidu定位。

      在baidu开发者中心申请ak,然后下载相应的jar包倒入lib中。具体环境配置的方法看百度开发者中心的文档。

      我想要实现的功能是,在不通过导入地图的情况下,获得地理位置。

      

    设置AndroidManifest.xml

    在application标签中声明service组件,每个app拥有自己单独的定位service

    <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
    </service>

    【提醒】

    定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。 <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>

    声明使用权限

    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!-- 用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!-- 访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

    设置AcessKey

    SDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。

    设置AccessKey,在application标签中加入

    <meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="key" />       //key:开发者申请的key



    相关实现代码如下:
    locationClient在主线程中定义。
    /*
    *在撤销时,将locationClient停止
    */

    protected void onDestroy(){
    super.onDestroy();
    if(locationClient != null && locationClient.isStarted()){
    locationClient.stop();
    locationClient = null;
    }
    }

    /**

    *在主线程中进行调用该函数获得相应信息

    */
    private void getCurrentCity(){
    locationClient = new LocationClient(getApplicationContext());
    new Thread(new Runnable(){
    @Override
    public void run() {
    //定位相关配置
    LocationClientOption option = new LocationClientOption();
    option.setIsNeedAddress(true);  //设置是否需要详细的address,这正是我想要的,可以获得城市,省份,街道等
    option.setOpenGps(true); //打开GPS;
    option.setCoorType("bd0911");//设置返回值的坐标类型
    option.setProdName("danmulvxing");
    option.setScanSpan(UPDATE_TIME);
    locationClient.setLocOption(option);

    //注册监听
    locationClient.registerLocationListener(new BDLocationListener(){
    @Override
    public void onReceiveLocation(BDLocation location) {
    if(location == null)
    {
    Message error = new Message();
    error.what = NO_LOCATION;
    handler.sendMessage(error);
    return;
    }
    Message message = new Message();
    message.what = SHOW_CITY;
    message.obj = location.getCity();
    handler.sendMessage(message);
    }

    });

    //开始定位
    locationClient.start();   
    locationClient.requestLocation(); 
    }
    }).start();

    }

    private Handler handler = new Handler(){
    public void handleMessage(Message msg){
    switch(msg.what){
    case SHOW_CITY:
    String city = (String)msg.obj;
    Toast.makeText(getApplicationContext(), "City is " + city.substring(0, city.length() - 1), Toast.LENGTH_SHORT).show();
    updateSpinnerCity(city.substring(0, city.length() - 1)); //更新城市
    break;
    case NO_LOCATION:
    Toast.makeText(getApplicationContext(), "定位失败,请稍后重试", Toast.LENGTH_SHORT).show();
    break;
    }
    }

    };

    百度已经实现了很多有用的接口,具体可以查看百度API文档
    
    
     
  • 相关阅读:
    JVM参数说明介绍
    使用Intellij IDEA的Bookmarks
    js中对小数取整
    idea 中pom.xml依赖版本号报错(报红,如下图所示)
    Springboot项目启动后访问不到Controller
    pringBoot Controller接收参数的几种常用方式
    Spring启动执行流程梳理
    SQL条件语句(IF, CASE WHEN, IF NULL)
    获取tomcat服务器上的部分日志
    Linux下 SpringBoot jar项目后台运行、查看、停用
  • 原文地址:https://www.cnblogs.com/new-comer/p/5373594.html
Copyright © 2020-2023  润新知