在AndroidManifest.xml中写入密匙和权限:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bwie.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- 这个权限用于进行网络定位-->
<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" >
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="填写密匙" />
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>
<activity
android:name="com.bwie.test.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>
</application>
</manifest>
在两个Fragment上写入,进行切换:
显示基础地图:
package com.bwie.fragments;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
import com.bwie.test.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class BasemapFragment extends Fragment{
private MapView mMapView =null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getActivity().getApplicationContext());
View view=inflater.inflate(R.layout.base_map_fragment_item, null);
//获取地图控件引用
mMapView = (MapView) view.findViewById(R.id.bmapView);
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
public void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
再是定位地图:
package com.bwie.fragments;
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.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.model.LatLng;
import com.bwie.test.R;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
public class LocationFragment extends Fragment {
// 定位相关
LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
private LocationMode mCurrentMode;
BitmapDescriptor mCurrentMarker;
MapView mMapView;
BaiduMap mBaiduMap;//定义 BaiduMap 地图对象的操作方法与接口
private boolean isFirstLoc=true;
private Button requestLocButton;
// UI相关
OnCheckedChangeListener radioButtonListener;
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getActivity().getApplicationContext());
View view=inflater.inflate(R.layout.fra2_location, null);
/*requestLocButton = (Button) view.findViewById(R.id.button1);
//定位图层显示方式 NORMAL:普通态: 更新定位数据时不对地图做任何操作
mCurrentMode = LocationMode.NORMAL;
requestLocButton.setText("普通");
OnClickListener btnClickListener = new OnClickListener() {
public void onClick(View v) {
switch (mCurrentMode) {
case NORMAL:
requestLocButton.setText("跟随");
//FOLLOWING:跟随态,保持定位图标在地图中心
mCurrentMode = LocationMode.FOLLOWING;
//参数:MyLocationConfiguration.LocationMode locationMode 定位图层显示方式
//参数:boolean enableDirection 是否允许显示方向信息
//参数:BitmapDescriptor customMarker 用户自定义定位图标
mBaiduMap
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
break;
case COMPASS:
requestLocButton.setText("普通");
mCurrentMode = LocationMode.NORMAL;
mBaiduMap
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
break;
case FOLLOWING:
requestLocButton.setText("罗盘");
//COMPASS:罗盘态,显示定位方向圈,保持定位图标在地图中心
mCurrentMode = LocationMode.COMPASS;
mBaiduMap
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
break;
default:
break;
}
}
};
requestLocButton.setOnClickListener(btnClickListener);
RadioGroup group = (RadioGroup) view.findViewById(R.id.radioGroup);
radioButtonListener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.defaulticon) {
// 传入null则,恢复默认图标
mCurrentMarker = null;
mBaiduMap
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, null));
}
if (checkedId == R.id.customicon) {
// 修改为自定义marker
mCurrentMarker = BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher);
mBaiduMap
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
}
}
};
group.setOnCheckedChangeListener(radioButtonListener);*/
// 地图初始化
mMapView = (MapView) view.findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
mCurrentMode = LocationMode.NORMAL;
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
mCurrentMarker = BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher);
mBaiduMap
.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(getActivity());
//注册定位监听函数
mLocClient.registerLocationListener(myListener);
//配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);//设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效
mLocClient.setLocOption(option);//设置 LocationClientOption
mLocClient.start();//启动定位sdk
return view;
}
/**
* 定位SDK监听函数
*/
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {//BDLocaiton - 定位结果
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
return;
}
//定位数据
MyLocationData locData = new MyLocationData.Builder()//MyLocationData.Builder定位数据建造器
.accuracy(location.getRadius())//accuracy设置定位数据的精度信息,单位:米
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())//latitude 设置定位数据的纬度
.longitude(location.getLongitude()).build();//longitude 设置定位数据的经度
mBaiduMap.setMyLocationData(locData);//设置定位数据, 只有先允许定位图层后设置数据才会生效,参见 setMyLocationEnabled(boolean)
if (isFirstLoc) {
isFirstLoc = false;
//LatLng 地理坐标基本数据结构
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
//MapStatusUpdate 描述地图状态将要发生的变化
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);//newLatLng(LatLng latLng) 设置地图新中心点
mBaiduMap.animateMapStatus(u);//以动画方式更新地图状态,动画耗时 300 ms
}
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
@Override
public void onDestroy() {
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层 设置是否允许定位图层
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
@Override
public void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
在Activity中进行切换:
package com.bwie.test;
import com.bwie.fragments.BasemapFragment;
import com.bwie.fragments.LocationUserFragment;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends FragmentActivity implements OnClickListener{
private LinearLayout ll;
private Button base;
private Button location;
private FragmentManager fm;
private BasemapFragment basemap;
private LocationUserFragment locationuser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fm=getSupportFragmentManager();
init();
}
private void init() {
//找对象
ll=(LinearLayout)findViewById(R.id.ll);
base=(Button)findViewById(R.id.bt_base);
location=(Button)findViewById(R.id.bt_location);
//实例化
basemap=new BasemapFragment();
locationuser=new LocationUserFragment();
//创建事务
FragmentTransaction trac=fm.beginTransaction();
trac.add(R.id.ll, basemap);
trac.add(R.id.ll, locationuser);
trac.replace(R.id.ll, basemap);
trac.commit();
//按钮的背景色
base.setBackgroundColor(Color.BLUE);
location.setBackgroundColor(Color.GRAY);
//按钮的监听
base.setOnClickListener(this);
location.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_base:
base.setBackgroundColor(Color.BLUE);
location.setBackgroundColor(Color.GRAY);
FragmentTransaction trac=fm.beginTransaction();
trac.replace(R.id.ll, basemap);
trac.commit();
break;
case R.id.bt_location:
base.setBackgroundColor(Color.GRAY);
location.setBackgroundColor(Color.BLUE);
FragmentTransaction trac1=fm.beginTransaction();
trac1.replace(R.id.ll, locationuser);
trac1.commit();
break;
default:
break;
}
}
}
另外百度地图的jar包也一定要添加进去。