关于Android中运用定位的解决方案

关于Android中使用定位的解决方案。

          笔者最近几天在正在写一个Android下定位的程序,最开始用网上的常规方法,使用Google的API定位发现很不好用,而且经常定不出来。

后来使用百度的定位API很方便 而且定位速度快,比较精准。 感叹啊,百度终于有地方超过Google了。。。

这里是百度定位API的下载地址:点击打开链接


下面来说下使用方法:

1.在AndroidManifest.xml中添加如下权限:

<permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission>
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>
<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>

  以及添加Service

   <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" 
android:permission="android.permission.BAIDU_LOCATION_SERVICE">
    <intent-filter>
        <action android:name="com.baidu.location.service_v2.4"></action>
    </intent-filter>
</service>

2.新建一个内部类MyLinstener

public class MyLinstener implements BDLocationListener{

		@Override
		public void onReceiveLocation(BDLocation arg0) {
			// TODO Auto-generated method stub
			Log.i("纬度", arg0.getLatitude()+"");
			Log.i("经度", arg0.getLongitude()+"");
			Log.i("精度半径", arg0.getRadius()+"");
			if(arg0.getLocType()==BDLocation.TypeGpsLocation){   //卫星定位的结果
				Log.i("速度", arg0.getSpeed()+"");
				Log.i("卫星代号", arg0.getSatelliteNumber()+"");
			}
			if (arg0.getLocType()==BDLocation.TypeNetWorkLocation) { //网络定位的结果
				Log.i("地址", arg0.getAddrStr()+"");
			}
		}

		@Override
		public void onReceivePoi(BDLocation arg0) {
			// TODO Auto-generated method stub
			
		}
    	
    }

3.定义变量并初始化

	public LocationClient mLocationClient=null;
	public BDLocationListener mListener=new MyLinstener();
初始化

        mLocationClient=new LocationClient(this);
        mLocationClient.registerLocationListener(mListener);
        
        LocationClientOption option=new LocationClientOption();
        option.setOpenGps(true);	//启动Gps,注:手机上的GPs开关必须由用户自己打开。
        option.disableCache(true);	//设置是否不缓存结果
        option.setCoorType("gcj02"); //设置坐标系类型。
        option.setServiceName("com.baidu.location.service_v2.ss"); //这个属性一定要设置 不然找不到服务就无法定位
        
        mLocationClient.setLocOption(option);

4.启动定位


		        mLocationClient.start();
		        mLocationClient.requestLocation();


总结:我这个例子只是基本的功能,还有一些比如,设置自动刷新时间的功能,请大家自己看官方文档吧,就在上面的官方下载地址页面的。

这里提供例子的源码下载:点击打开链接