本人是新手,所以只能简单的实现一下定位功能,主要是了解,熟悉的一过程,慢慢的深究,那么实现的步骤有以下几步
注意申请秘钥的时候:需要百度账号,创建应用,SHA1哈希值(做唯一标识,数字签名),包名。
包名:可以下载官方Demo获取包名
当以上步骤完成,集成百度地图:
在官方Demo中获取所需的jar包导入项目中libs
在配置清单中
<pre>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myandroid_m2"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_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.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
-- 申请的key -->android:value="ssAM5WTIvewAsEooodkzogoQygfija1j" />
<activity
android:name="com.example.myandroid_m2.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>
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
service>
<activity
android:name="com.example.myandroid_m2.InfoActivity"
android:label="@string/title_activity_info" >
activity>
application>
manifes
在Activity中代码
package com.baway.test;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
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.baidu.mapapi.SDKInitializer;
public class MainActivity extends Activity {
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
private TextView tv_city_name;
private ListView lv_city;
private ArrayList list_column;
private String[] colunms = new String[] { "北京", "上海", "广州", "深圳", "成都",
"杭州", "天津", "郑州", "苏州", "浙江", "石家庄" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
// 找控件
init();
mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
mLocationClient.registerLocationListener(myListener); // 注册监听函数
// 设置参数
initLocation();
// 开始定位
mLocationClient.start();
// 为找到的控件设置数据
setData();
// 为lv设置适配器
lv_city.setAdapter(new ArrayAdapter(MainActivity.this,
android.R.layout.simple_expandable_list_item_1, list_column));
// 点击定位到的城市,跳转到房源列表
tv_city_name.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this,
InfoActivity.class);
startActivity(intent);
}
});
}
private void setData() {
// TODO Auto-generated method stub
// 创建列表
list_column = new ArrayList();
for (int i = 0; i < colunms.length; i++) {
list_column.add(colunms[i]);
}
}
private void init() {
// TODO Auto-generated method stub
tv_city_name = (TextView) findViewById(R.id.tv_city_name);
lv_city = (ListView) findViewById(R.id.lv_city);
}
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
int span = 1000;
option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);// 可选,默认false,设置是否使用gps
option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// 获取定位的城市
String city = location.getCity();
tv_city_name.setText(city);
}
}
}
在Mainactivity布局文件中
<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/tv_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GPS定位城市:"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_city_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_city"
android:text="城市名称:"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_city_hot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_city_name"
android:text="热门城市"
android:textSize="20sp" />
<ListView
android:id="@+id/lv_city"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tv_city_hot" >
ListView>
RelativeLayout>