基于百度地图定位SDK实现定位

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010214991/article/details/48491857

转载请注明出处:http://blog.csdn.net/u010214991/article/details/48491857

一、创建应用

要使用百度地图的一些功能,比如定位功能的实现,就必须首先注册一个百度开发者帐号,然后到http://lbsyun.baidu.com/apiconsole/key创建应用,申请开发中在你的程序的AndroidManifest配置文件所需要填写的key;创建应用时首先填写好应用名称和应用类型,填写过程中最值得注意的就是安全码了,事实上在该填写项下面已经标明安全码的填写格式,那就是:数字签名+;+包名。注意这里的分号是英文的分号,数字签名是你的eclispe中所用签名证书的SHA1值,注意不要填写成MD5值了,包名就是你项目中的包名,注意你在这里填写的包名必须与你项目中的包名一致,可在AndroidManifest查看package。以下是获取SHA1值的图示:

打开eclipse的preferences菜单,在Android下的【Build】中可以看到SHA1的值,如下图:


二、导入用于定位的jar包

我下载的是locSDK_6.11.jar,你到百度开发者官网下载,下载后解压将jar连同里面装.so的文件的文件夹一起导入到你工程的libs文件中。

用于定位的SDK的下载地址http://developer.baidu.com/map/index.php?title=android-locsdk/geosdk-android-download




三、配置AndroidManifest.xml文件


1、添加以下权限

 <!-- 百度API所需权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

2、在AndroidManifest的Application标签内添加以下代码

 <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="填你在百度开发平台创建的应用AK" />

下面我的整个配置文件的内容,其实就是按照上面添加东西而已,可以跳过不看。

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

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

    <!-- 百度API所需权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.map.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="l0EZ3U9L4qG38WIPNOdrUvtx" />
    </application>

</manifest>


四、MainActivity.java

<pre name="code" class="java">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;
import com.example.dingwei.R;

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

public class MainActivity extends Activity {

	private TextView textView;
	private LocationClient locationClient = null;// 定位SDK的核心类
	private String tempcoor = "gcj02";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView = (TextView) findViewById(R.id.textView1);

		locationClient = new LocationClient(getApplicationContext());// 初始化定位对象
		locationClient.registerLocationListener(bdLocationListener);// 注册定位监听器

		// 定位前的准备工作
		initLocation();

		locationClient.start();// 开始定位
		locationClient.requestLocation();
	}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (locationClient != null) {
locationClient.unRegisterLocationListener(bdLocationListener);
locationClient = null;
}
}
	public void initLocation() {

		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Hight_Accuracy);// 高精度定位模式
		option.setCoorType(tempcoor);// 国测局加密经纬度坐标
		option.setScanSpan(0);
		option.setIsNeedAddress(true);
		option.setOpenGps(true);
		option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
		option.setIgnoreKillProcess(true);
		locationClient.setLocOption(option);

	}

	BDLocationListener bdLocationListener = new BDLocationListener() {

		@Override
		public void onReceiveLocation(BDLocation location) {
			// TODO Auto-generated method stub
			if (location == null) {
				return;
			}

			textView.setText("radius:" + location.getRadius() + ";"
					+ "latitute:" + location.getLatitude() + ";"
					+ "longtitute:" + location.getLongitude() + ";"
					+ "address:" + location.getAddrStr());

		}
	};

	

}

 
 

五、activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="无法获取当前位置,请重试" />

</RelativeLayout>


好了,到这里简单的定位功能讲解就结束了,咱们下期见。 再见


猜你喜欢

转载自blog.csdn.net/u010214991/article/details/48491857