百度定位(不显示界面获取经纬度以及详细地址信息)

上图:
这里写图片描述

效果图上了!大家看看应该很明白干什么用的了!在我们的实际开发中,往往很多时候,都需要我们的定位参数上传到服务器,可是我们又不需要这种地图界面!而只是让它都在后台完成!其实这个很好解决。今天我将一步一步的把代码分享上来。

第一步:对于要用到百度定位,首先你需要去百度开发网站申请appId 和 密钥!
百度地图开发者平台创建应用和申请密钥
在这个里面,你将要把自己的应用申请到百度开发者平台,并且获取以上信息。

第二步:你将要下载最新的sdk的jar包
百度地图定位sdk开发包下载

第三步:代码的书写:
把第二步下载下来的开发包中的lib中的目录完整的复制粘贴到工程的libs目录下。

同时在配置清单文件中添加如下权限:

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

在配置清单文件中添加密钥与服务

        <!-- 百度密钥(自己申请):4QhGGpw4Evv808trpVBkAl1a -->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="4QhGGpw4Evv808trpVBkAl1a" />

    <!-- 百度地图定位的服务 -->
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>

这里完成后,我们书写主要的java代码了,我这里把这个类简单的整理了下:

package com.lzp.locationgps;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

/**
 * @类名:LocationGps
 * @类描述:Gps定位类
 * @作者:asus
 * @创建时间:2015年3月8日-下午2:47:02
 * @修改人:
 * @修改时间:
 * @修改备注:
 */
public class LocationGps {
    private String gpsTime = ""; // 定位时间
    private double latitude; // 纬度
    private double longitude; // 经度
    private double radius; // 半径
    private String province = ""; // 省份
    private String city = ""; // 城市
    private String locationAddr = "";// 详细地址
    private String allText = "";// 以上所有信息
    private double speed; // 速度
    private int satelliteNumber; // 卫星数
    private LocationGpsListener listener;

    // 定位客户端类
    public LocationClient mLocationClient = null;
    // 定位监听器类
    public BDLocationListener myListener = new MyLocationListener();

    private LocationGps() {
    }

    /* 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例 没有绑定的关系,而且只有被调用到时才会装载,从而实现了延迟加载 */
    private static class SingTonHolder {
        /* 静态初始化器,由JVM来保证线程安全 */
        private static LocationGps instance = new LocationGps();
    }

    public void init() {
        // 初始化
        mLocationClient = new LocationClient(MyApplication.getInstance());
        // 设置定位参数
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 打开GPRS
        option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
        option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
        option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
        option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向
        mLocationClient.setLocOption(option);
        // 注册监听函数
        mLocationClient.registerLocationListener(myListener);
    }

    /* 该单例实现了延迟加载和线程安全 */
    public static LocationGps getInstance() {
        return SingTonHolder.instance;
    }

    /**
     * @类名:MyLocationListener
     * @类描述:定位成功之后的回调函数
     * @作者:asus
     * @创建时间:2015年3月8日-下午2:08:45
     */
    public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            if (location == null)
                return;

            StringBuffer sb = new StringBuffer(256);
            sb.append("时间 : ");
            sb.append(location.getTime());
            gpsTime = location.getTime();

            sb.append("\n返回码 : ");
            sb.append(location.getLocType());
            sb.append("\n纬度 : ");
            sb.append(location.getLatitude());
            latitude = location.getLatitude();

            sb.append("\n经度 : ");
            sb.append(location.getLongitude());
            longitude = location.getLongitude();

            sb.append("\n半径 : ");
            sb.append(location.getRadius());
            radius = location.getRadius();

            sb.append("\n省 : ");
            sb.append(location.getProvince());
            province = location.getProvince();

            sb.append("\n市 : ");
            sb.append(location.getCity());
            city = location.getCity();

            if (location.getLocType() == BDLocation.TypeGpsLocation) {
                sb.append("\n速度 : ");
                sb.append(location.getSpeed());
                speed = location.getSpeed();

                sb.append("\n卫星数 : ");
                sb.append(location.getSatelliteNumber());
                satelliteNumber = location.getSatelliteNumber();

                sb.append("\nGPS详细地址:");
                sb.append(location.getAddrStr());
                locationAddr = location.getAddrStr();
            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
                sb.append("\nNetWorkLocation详细地址 : ");
                sb.append(location.getAddrStr());
                locationAddr = location.getAddrStr();
            }

            allText = sb.toString();
            listener.setGpsData(location);
        }
    }

    /**
     * @方法说明:开启定位
     * @方法名称:startGps
     * @返回值:void
     */
    public void startGps() {
        init();
        // 调用此方法开始定位
        mLocationClient.start();
    }

    /**
     * @方法说明:注销定位
     * @方法名称:stopGps
     * @返回值:void
     */
    public void stopGps() {
        if(null == mLocationClient){
            return;
        }
        mLocationClient.unRegisterLocationListener(myListener);
        mLocationClient.stop();
        mLocationClient = null;
    }

    public String getGpsTime() {
        return gpsTime;
    }

    public double getLatitude() {
        return latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public double getRadius() {
        return radius;
    }

    public String getProvince() {
        return province;
    }

    public String getCity() {
        return city;
    }

    public String getLocationAddr() {
        return locationAddr;
    }

    public double getSpeed() {
        return speed;
    }

    public int getSatelliteNumber() {
        return satelliteNumber;
    }

    public String getAllText() {
        return allText;
    }

    public void setListener(LocationGpsListener listener) {
        this.listener = listener;
    }

    public interface LocationGpsListener {
        public void setGpsData(BDLocation location);
    }
}

我们只需要在我们调用的时候简单的调用就可以了:

package com.lzp.locationgps;

import com.baidu.location.BDLocation;
import com.lzp.locationgps.LocationGps.LocationGpsListener;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener,
        LocationGpsListener {
    private Button dingwei;
    private Button cancle;
    private TextView tv;
    private LocationGps gps;
    private ProgressBar progressBar1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gps = LocationGps.getInstance();
        gps.setListener(this);
        dingwei = (Button) this.findViewById(R.id.button1);
        dingwei.setOnClickListener(this);
        cancle = (Button) this.findViewById(R.id.button2);
        cancle.setOnClickListener(this);
        tv = (TextView) this.findViewById(R.id.textView1);
        tv.setText("点击定位,获取详细信息!");
        progressBar1 = (ProgressBar) this.findViewById(R.id.progressBar1);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:
            progressBar1.setVisibility(View.VISIBLE);
            gps.startGps();
            break;
        case R.id.button2:
            progressBar1.setVisibility(View.GONE);
            gps.stopGps();
            tv.setText("点击定位,获取详细信息!");
            break;
        }
    }

    @Override
    public void setGpsData(BDLocation location) {
        progressBar1.setVisibility(View.GONE);
        tv.setText(gps.getAllText());
        gps.stopGps();
    }
}

好,到此ok,至于布局什么的,相必大家都知道了!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值