百度地图之---定位实现 并显示定位结果地图

主要参考百度API 

 http://developer.baidu.com/map/index.php?title=android-locsdk

总结为如下几个步骤:

1、申请key

如何申请请见:http://developer.baidu.com/map/index.php?title=android-locsdk/guide/key

2、导入定位所需的当前最新库文件(.so  和 .jar 文件,我在2014年11月17日下载的最新的,有需要的直接点击下载

将.so文件拷贝到libs/armeabi目录下。

将.jar文件拷贝到工程的libs目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定 jar,确定后返回。

这样您就可以在程序中使用百度定位SDK了。


3、编写代码。

3.1、新建工程 mymap

3.2、在AndroidManifest.xml中加入

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <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.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_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.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_LOGS" >
    </uses-permission>


3.3、在AndroidManifest.xml中的application标签中添加

       <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="WoLfGNLQHozWNQON63E4yxm7" /> 此处替换为你自己在百度网上申请的key值

        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>
3.4  编写源代码 location_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_loc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="定位" />

        <TextView
            android:id="@+id/txt_loc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:textColor="#FF0000"
            >
        </TextView>
    </LinearLayout>

    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:clickable="true" />

</LinearLayout>

3.5 编写源码  LocationActivity.java

package com.example.mymap;

import com.baidu.lbsapi.BMapManager;
import com.baidu.lbsapi.MKGeneralListener;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;

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

public class LocationActivity extends Activity {
	private LocationClient mLocationClient;
	private BDLocationListener mLocListener = new MyLocationListener();
	private MapView mMapView;
	private BaiduMap mMap;
	private BMapManager mMapManager;
	private TextView mTxtLoc;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		// /----start---可不加
		mMapManager = new BMapManager(getApplicationContext());
		mMapManager.init(new MKGeneralListener() {

			@Override
			public void onGetPermissionState(int ret) {
				// TODO Auto-generated method stub
				if (ret == 300) {
					T.show(LocationActivity.this, "ret : " + ret + ", key验证失败");
					mTxtLoc.setText("ret : " + ret + ", key验证失败");
				}
			}
		});
		// /-----end-----可不加
		init();

	}

	private void init() {
		// TODO Auto-generated method stub
		SDKInitializer.initialize(getApplicationContext());
		setContentView(R.layout.location_layout);
		mTxtLoc = (TextView) findViewById(R.id.txt_loc);
		// 获取地图控件引用
		mMapView = (MapView) findViewById(R.id.bmapView);
		mMap = mMapView.getMap();
		mMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

		// 定位
		mLocationClient = new LocationClient(getApplicationContext());
		mLocationClient.registerLocationListener(mLocListener);

		// 设置定位参数
		LocationClientOption opt = new LocationClientOption();
		opt.setOpenGps(true);
		mLocationClient.setLocOption(opt);

		mLocationClient.start();

		if (mLocationClient != null && mLocationClient.isStarted()) {
			L.log("发起定位");
			mLocationClient.requestLocation();
		} else {
			L.log("locClient is null or not started");
		}

	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		mMapView.onResume();
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		mMapView.onPause();
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		mMapView.onDestroy();
		mLocationClient.stop();
		mLocationClient.unRegisterLocationListener(mLocListener);
	}

	private class MyLocationListener implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation loc) {
			// TODO Auto-generated method stub
			if (loc == null) {
				return;
			}
			StringBuffer sb = new StringBuffer(256);
			sb.append("time:");
			sb.append(loc.getTime());
			sb.append("\nerror code:");
			sb.append(loc.getLocType());
			sb.append("\nlatitude(纬度):");
			sb.append(loc.getLatitude());
			sb.append("\nlontitude(经度):");
			sb.append(loc.getLongitude());
			sb.append("\nradius:");
			sb.append(loc.getRadius());

			if (loc.getLocType() == BDLocation.TypeGpsLocation) {
				sb.append("\nspeed:");
				sb.append(loc.getSpeed());
				sb.append("\nsatellite:");
				sb.append(loc.getSatelliteNumber());
			} else if (loc.getLocType() == BDLocation.TypeNetWorkLocation) {
				sb.append("\naddr:");
				sb.append(loc.getAddrStr());
			}
			//如果是GPS定位,addr为null,只有当网络定位时,addr才有值
			T.show(getApplicationContext(), "定位类型:" + loc.getLocType()+ ", 定位addr:" + loc.getAddrStr());
			L.log(sb.toString());
			mTxtLoc.setText("" + sb.toString());

			// 标注覆盖物
			LatLng point = new LatLng(loc.getLatitude(), loc.getLongitude());
			BitmapDescriptor bitmap = BitmapDescriptorFactory
					.fromResource(R.drawable.icon_marka);
			OverlayOptions opt = new MarkerOptions().position(point)
					.icon(bitmap).zIndex(9).draggable(true);
			mMap.addOverlay(opt);

			L.log("改变地图状态: 将定位位置显示在当前地图中心");
			LatLng center = new LatLng(loc.getLatitude(), loc.getLongitude());
			MapStatus mapStatus = new MapStatus.Builder().target(center)
					.zoom(18).build();
			MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory
					.newMapStatus(mapStatus);
			mMap.setMapStatus(mapStatusUpdate);

		}

	}

	public void onClick(View v) {
		if (v.getId() == R.id.btn_loc) {
			T.show(getApplicationContext(), "正在定位。。。");
			mLocationClient.requestLocation();
		}
	}
}


3.6 附件定位图片:icon_marka.png

4、工程源代码下载请点击 : 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值