百度地图定位

package com.example.mylocation;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类
//如果使用地理围栏功能,需要import如下类
import com.baidu.location.BDGeofence;
import com.baidu.location.BDLocationStatusCodes;
import com.baidu.location.GeofenceClient;
import com.baidu.location.GeofenceClient.OnAddBDGeofencesResultListener;
import com.baidu.location.GeofenceClient.OnGeofenceTriggerListener;
import com.baidu.location.GeofenceClient.OnRemoveBDGeofencesResultListener;
import com.baidu.location.LocationClientOption.LocationMode;

/**
 * 
* 类名称:MainActivity   
* 类描述:   使用百度地图组件查询当前应用使用者地理位置,注意,每个应用对应1个key
* 	同时,首次使用定位,类中定义的时间是每3秒扫描一次,如果防止第一次没有定位成功,
* 	需要把mLocationClient.start()的位置提前,同时注意需要手动关闭以节省资源
* 创建人:zhanglin   
* 创建时间:2014-6-11 上午9:44:58   
* 修改人:zhanglin   
* 修改时间:2014-6-11 上午9:44:58   
* 修改备注:   
* @version    
*
 */
public class MainActivity extends Activity
{

	TextView textView;
	Button button;
	final static String TAG = "MyLocation";

	public LocationClient mLocationClient = null;
	public BDLocationListener myListener = new MyLocationListener();

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mLocationClient = new LocationClient(MainActivity.this); // 声明LocationClient类
		mLocationClient.registerLocationListener(myListener); // 注册监听函数

		textView = (TextView) findViewById(R.id.textView);
		button = (Button) findViewById(R.id.button);

		if (!isConnect(MainActivity.this))
		{
			Toast.makeText(MainActivity.this, "网络连接未开启", Toast.LENGTH_SHORT)
					.show();
		}

		button.setOnClickListener(new OnClickListener()
		{

			@Override
			public void onClick(View v)
			{
				LocationClientOption option = new LocationClientOption();
				option.setLocationMode(LocationMode.Battery_Saving);// 设置定位模式
				option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
				option.setScanSpan(5000);// 设置扫描间隔,单位是毫秒为5000ms
				option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
				option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向
				mLocationClient.setLocOption(option);

				mLocationClient.start();
				
				Log.e(TAG, "mLocationClient = " + mLocationClient + " mLocationClient.isStarted() =" + mLocationClient.isStarted());
				if (mLocationClient != null && mLocationClient.isStarted())
				{
					// 请求定位,异步返回,结果在locationListener中获取.
					mLocationClient.requestLocation();
				}
				else
				{
					Log.d("LocSDK3", "locClient is null or not started");
				}

			}
		});

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	// 判断网络连接
	public static boolean isConnect(Context context)
	{

		// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
		try
		{

			ConnectivityManager connectivity = (ConnectivityManager) context
					.getSystemService(Context.CONNECTIVITY_SERVICE);
			if (connectivity != null)
			{
				// 获取网络连接管理的对象
				NetworkInfo info = connectivity.getActiveNetworkInfo();

				if (info != null && info.isConnected())
				{

					// 判断当前网络是否已经连接
					if (info.getState() == NetworkInfo.State.CONNECTED)
					{
						return true;
					}
				}
			}
		}
		catch (Exception e)
		{
			Log.v("error", e.toString());
		}
		return false;
	}
	
	public void logMsg(String str) {
			textView.setText(str);
	}

	/**
	 *  创建位置监听器
	* 类名称:MyLocationListener   
	* 类描述:   这个类可以参考百度api 中com.baidu.location包下的BDLocation类 地址http://developer.baidu.com/map/loc_refer/index.html
	 */
	public class MyLocationListener implements BDLocationListener
	{
		// 接收异步返回的定位结果,参数是BDLocation类型参数
		@Override
		public void onReceiveLocation(BDLocation location)
		{
			if (location == null)
				return;
			StringBuffer sb = new StringBuffer(256);
			sb.append("time : ");
			sb.append(location.getTime());
			sb.append("\nerror code : ");
			sb.append(location.getLocType());
			sb.append("\nlatitude : ");
			sb.append(location.getLatitude());
			sb.append("\nlontitude : ");
			sb.append(location.getLongitude());
			sb.append("\nradius : ");
			sb.append(location.getRadius());
			if (location.getLocType() == BDLocation.TypeGpsLocation)//定位结果描述:GPS定位结果
			{
				sb.append("\nspeed : ");
				sb.append(location.getSpeed());
				sb.append("\nsatellite : ");
				sb.append(location.getSatelliteNumber());
			}
			else if (location.getLocType() == BDLocation.TypeNetWorkLocation)//定位结果描述:网络定位结果
			{
				
				sb.append("\nprovince : ");
				sb.append(location.getProvince());
				sb.append("\ncity : ");
				sb.append(location.getCity());
				
				sb.append("\naddr : ");
				sb.append(location.getAddrStr());
			}

			logMsg(sb.toString());
		}

		// 接收异步返回的POI查询结果,参数是BDLocation类型参数
		@Override
		public void onReceivePoi(BDLocation poiLocation)
		{
			if (poiLocation == null)
			{
				return;
			}
			StringBuffer sb = new StringBuffer(256);
			sb.append("Poi time : ");
			sb.append(poiLocation.getTime());
			sb.append("\nerror code : ");
			sb.append(poiLocation.getLocType());
			sb.append("\nlatitude : ");
			sb.append(poiLocation.getLatitude());
			sb.append("\nlontitude : ");
			sb.append(poiLocation.getLongitude());
			sb.append("\nradius : ");
			sb.append(poiLocation.getRadius());
			if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation)
			{
				sb.append("\naddr : ");
				sb.append(poiLocation.getAddrStr());
			}
			if (poiLocation.hasPoi())
			{
				sb.append("\nPoi:");
				sb.append(poiLocation.getPoi());
			}
			else
			{
				sb.append("noPoi information");
			}
			logMsg(sb.toString());
		}

	}

}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mylocation"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <!-- 这个权限用于进行网络定位 -->
    <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>
    <!-- 允许应用读取低级别的系统日志文件 -->
    <uses-permission android:name="android.permission.READ_LOGS" >
    </uses-permission>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>

        <activity
            android:name="com.example.mylocation.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="B22d0cf58a3a73a414142d213a48ea68"/>
    </application>

</manifest>


你可能感兴趣的:(百度地图定位)