android 百度地图定位

首先我们需要去百度地图开发者平台申请一个应用密钥,这个具体的申请方式在百度地图开发者平台里面,这里就不做讲述了。在申请好了密钥之后我们首先要做的就是把百度地图的sdk加进来。

我们需要加一个sdk和一个so文件,

这个弄好之后我们接下来就是把百度地图需要的的权限加进去

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
    </uses-permission>	
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
    </uses-permission>
    <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"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
    </uses-permission>
    <uses-permission android:name="android.permission.READ_LOGS">
    </uses-permission>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
权限加完之后接下来我们需要把百度的密钥和service加进去

 <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
            <intent-filter>
                <action android:name="com.baidu.location.service_v2.2" >
                </action>
            </intent-filter>
        </service>
        <meta-data android:name="com.baidu.lbsapi.API_KEY" 
            android:value="cgm9sfAppCCMF0aloSesfqOS"/>
这些弄好之后我们的准备工作就好了,接下来就是代码开发了。

这里为了把百度地图的地址获取和activity不放在一起,在了一下简单处理,以后需要的时候就可以直接调用这个地图工具来获取地址了

package com.example.baidudemo;

import android.content.Context;
import android.util.Log;

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

public class BaiduLocalUtils {
	private LocationClient mLocationClient;//定位SDK的核心类
    private MyLocationListener mMyLocationListener;//定义监听类
    private OnFinshListener mListener ;
    private static BaiduLocalUtils bean = new BaiduLocalUtils(); 
    
    public static BaiduLocalUtils getInstantce(){
    	return bean;
    }
    /**
     * 获取当前的详细地址
     * @param context
     * @param listener
     */
    public  void getLocalAddStr(Context context,OnFinshListener listener){
    	if(mLocationClient==null){
	    	initLocationClient(context);
	    	InitLocation();
    	}
    	mListener=listener;
    	mLocationClient.start();
    }
    
    private void InitLocation(){
		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Hight_Accuracy);//设置高精度定位定位模式
		option.setCoorType("bd09ll");//设置百度经纬度坐标系格式
		option.setScanSpan(1000);//设置发起定位请求的间隔时间为1000ms
		option.setIsNeedAddress(true);//反编译获得具体位置,只有网络定位才可以
		mLocationClient.setLocOption(option);
	}
    
    private void initLocationClient(Context context){
		mLocationClient = new LocationClient(context);
        mMyLocationListener = new MyLocationListener();
        mLocationClient.registerLocationListener(mMyLocationListener);
	}
    
    /**
     * 实现实位回调监听
     */
    private class MyLocationListener implements BDLocationListener {

    	public void onReceiveLocation(BDLocation location) {
            //Receive Location 
            StringBuffer sb = new StringBuffer(256);
            if (location.getLocType() == BDLocation.TypeGpsLocation){//通过GPS定位
                sb.append(location.getAddrStr());//获得当前地址
            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){//通过网络连接定位
                sb.append(location.getAddrStr());//获得当前地址
            }
            
            if(mListener!=null){
            	if(!sb.toString().equals("")){
            		mListener.Succ(sb.toString());
            	}else{
            		mListener.Fail();
            	}
            }
            Log.i("BaiduLocationApiDem", sb.toString());
        }
    }
    
    
    public interface OnFinshListener{
    	public void Succ(String address);
    	public void Fail();
    }
}

这样就好了,接下来我们验证下

package com.example.baidudemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import com.example.baidudemo.BaiduLocalUtils.OnFinshListener;

public class MainActivity extends Activity {
	private TextView LocationResult;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		LocationResult = (TextView)findViewById(R.id.textView1);
		StringBuffer addString = new StringBuffer();  
		BaiduLocalUtils.getInstantce().getLocalAddStr(this,new OnFinshListener() {
			@Override
			public void Succ(String address) {
				LocationResult.setText(address);
			}
			@Override
			public void Fail() {
			}
		});
		LocationResult.setText(addString);
	}

}
结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值