百度地图----->地图类型、定位模式、实时交通、我的位置、添加覆盖物、覆盖物详情及提示

论坛 期权论坛 脚本     
匿名技术用户   2020-12-29 23:02   490   0
在百度地图开发平台 http://developer.baidu.com/map/index.php?title=androidsdk

进行创建应用,获取应用的AK,在进行下载BaiduLBS_Android.jar和armeabi--然后放于libs目录下,另外获取安全码

Android SDK安全码组成:数字签名+;+包名。(查看详细配置方法),创建应用,提交后,自动下发Ak(配置文件中用到)

下面是官方的提示:

第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;
1.JPG
第二步:在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。
通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。
注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:
1. 在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;
2. Project -> clean-> clean all .

下面也是官方的提示:

百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见工程配置部分的介绍);
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>
2)添加所需权限
<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" />
第三步,在布局xml文件中添加地图控件;
<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />
第四步,在应用程序创建时初始化 SDK引用的Context 全局变量:
public class MainActivity extends Activity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
    }  
}
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
第五步,创建地图Activity,管理地图生命周期;
public class MainActivity extends Activity {  
    MapView mMapView = null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
        //获取地图控件引用  
        mMapView = (MapView) findViewById(R.id.bmapView);  
    }  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
        mMapView.onDestroy();  
    }  
    @Override  
    protected void onResume() {  
        super.onResume();  
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
        mMapView.onResume();  
        }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
        mMapView.onPause();  
        }  
    }

修正:官方的权限在某些手机上无法成功,为了保险起见,可以用下面的这些权限

 <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.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" />
***************************************************************************************************项目代码开始*************************************
开始粘贴项目代码吧 +++++++++天下一大抄,抄来抄去,这里感谢一些hyman大神。。。

先看自己项目的配置文件吧

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

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

    <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.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" />

    <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="h1sIN5FLXGPodE5QCt7VpU7R" />

        <activity
            android:name=".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" >
            <intent-filter>
                <action android:name="com.baidu.location.service_v2.2" >
                </action>
            </intent-filter>
        </service>
    </application>

</manifest>


主页面布局

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" >

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

    <RelativeLayout
        android:id="@+id/id_maker_ly"
        android:layout_width="match_parent"
        android:layout_height="220dp"
        android:layout_alignParentBottom="true"
        android:background="#cc4e5a6b"
        android:clickable="true"
        android:visibility="gone" >

        <ImageView
            android:id="@+id/id_info_img"
            android:layout_width="fill_parent"
            android:layout_height="150dp"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="12dp"
            android:layout_marginRight="12dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/img_border"
            android:scaleType="fitXY"
            android:src="@drawable/a01" >
        </ImageView>

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:background="@drawable/bg_map_bottom" >

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="20dp"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/id_info_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="老米家泡馍"
                    android:textColor="#fff5eb" />

                <TextView
                    android:id="@+id/id_info_distance"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="距离200米"
                    android:textColor="#fff5eb" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="20dp"
                android:orientation="horizontal" >

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@drawable/map_zan"
                    android:clickable="true" />

                <TextView
                    android:id="@+id/id_info_zan"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="789"
                    android:textColor="#fff5eb" />
            </LinearLayout>
        </RelativeLayout>
    </RelativeLayout>

</RelativeLayout>

另外drawable里面的一个小文件(无关痛痒,是图像的小处理)

img_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <stroke
        android:width="20dp"
        android:color="#AAFFFFFF" />

    <padding
        android:bottom="2dp"
        android:left="2dp"
        android:right="2dp"
        android:top="2dp" >
    </padding>
</shape>

Info(是地图上marker的封装信息类,便于学习,没有从服务器获取)

package com.example.homebaimap;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Info implements Serializable
{
 private static final long serialVersionUID = -1010711775392052966L;
 private double latitude;
 private double longitude;
 //图片
 private int imgId;
 //名字
 private String name;
 //距离
 private String distance;
 //赞
 private int zan;

 public static List<Info> infos = new ArrayList<Info>();

 static
 {
  infos.add(new Info(34.242652, 108.971171, R.drawable.a01, "英伦贵族小旅馆",
    "距离209米", 1456));
  infos.add(new Info(34.242952, 108.972171, R.drawable.a02, "沙井国际洗浴会所",
    "距离897米", 456));
  infos.add(new Info(34.242852, 108.973171, R.drawable.a03, "五环服装城",
    "距离249米", 1456));
  infos.add(new Info(34.242152, 108.971971, R.drawable.a04, "老米家泡馍小炒",
    "距离679米", 1456));
 }

 public Info(double latitude, double longitude, int imgId, String name,
   String distance, int zan)
 {
  this.latitude = latitude;
  this.longitude = longitude;
  this.imgId = imgId;
  this.name = name;
  this.distance = distance;
  this.zan = zan;
 }

 public double getLatitude()
 {
  return latitude;
 }

 public void setLatitude(double latitude)
 {
  this.latitude = latitude;
 }

 public double getLongitude()
 {
  return longitude;
 }

 public void setLongitude(double longitude)
 {
  this.longitude = longitude;
 }

 public int getImgId()
 {
  return imgId;
 }

 public void setImgId(int imgId)
 {
  this.imgId = imgId;
 }

 public String getName()
 {
  return name;
 }

 public void setName(String name)
 {
  this.name = name;
 }

 public String getDistance()
 {
  return distance;
 }

 public void setDistance(String distance)
 {
  this.distance = distance;
 }

 public int getZan()
 {
  return zan;
 }

 public void setZan(int zan)
 {
  this.zan = zan;
 }

}


MainActivity

package com.example.homebaimap;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.RelativeLayout;
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.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.example.homebaimap.MyOrientationListener.OnOrientationListener;

public class MainActivity extends Activity {
 private Context context;
 // 定位相关
 private LocationMode mLocationMode;
 private LocationClient mLocationClient;
 private MyLocationListener mLocationListener;
 private boolean isFirstIn = true;
 private double mLatitude;
 private double mLongtitude;
 // 自定义定位图标
 private BitmapDescriptor mIconLocation;
 private MyOrientationListener myOrientationListener;
 private float mCurrentX;

 // 覆盖物相关
 private BitmapDescriptor mMarker;
 private RelativeLayout mMarkerLy;

 
 
 // 初始化视图控件
 private MapView mMapView;
 private BaiduMap mBaiduMap;
 private void initView() {
  mMapView = (MapView) findViewById(R.id.id_bmapView);
  mBaiduMap = mMapView.getMap();
  // 设置地图缩放级别,标尺大概在500米左右
  MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
  mBaiduMap.setMapStatus(msu);
 }

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
  // 注意该方法要再setContentView方法之前实现
  SDKInitializer.initialize(getApplicationContext());
  setContentView(R.layout.activity_main);

  this.context = this;
  //初始化控件,并且设置缩放级别
  initView();
  // 初始化定位
  initLocation();
  //初始化覆盖物
  initMarker();

  /**
   * 点击位置信息,回调方法
   */
  mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
   @Override
   public boolean onMarkerClick(Marker marker) {
    Bundle extraInfo = marker.getExtraInfo();
    //获取携带的信息
    Info info = (Info) extraInfo.getSerializable("info");
    ImageView iv = (ImageView) mMarkerLy
      .findViewById(R.id.id_info_img);
    TextView distance = (TextView) mMarkerLy
      .findViewById(R.id.id_info_distance);
    TextView name = (TextView) mMarkerLy
      .findViewById(R.id.id_info_name);
    TextView zan = (TextView) mMarkerLy
      .findViewById(R.id.id_info_zan);
    iv.setImageResource(info.getImgId());
    distance.setText(info.getDistance());
    name.setText(info.getName());
    zan.setText(info.getZan() + "");

    InfoWindow infoWindow;
    TextView tv = new TextView(context);
    tv.setBackgroundResource(R.drawable.location_tips);
    tv.setPadding(30, 20, 30, 50);
    tv.setText(info.getName());
    tv.setTextColor(Color.parseColor("#ffffff"));

    final LatLng latLng = marker.getPosition();
    Point p = mBaiduMap.getProjection().toScreenLocation(latLng);
    p.y -= 47;
    LatLng ll = mBaiduMap.getProjection().fromScreenLocation(p);

    infoWindow = new InfoWindow(tv, ll,
      new OnInfoWindowClickListener() {
       @Override
       public void onInfoWindowClick() {
        mBaiduMap.hideInfoWindow();
       }
      });
    mBaiduMap.showInfoWindow(infoWindow);
    mMarkerLy.setVisibility(View.VISIBLE);
    return true;
   }
  });
  //点击屏幕其他地方,取消那些提示,还有位置信息
  mBaiduMap.setOnMapClickListener(new OnMapClickListener() {

   @Override
   public boolean onMapPoiClick(MapPoi arg0) {
    return false;
   }

   @Override
   public void onMapClick(LatLng arg0) {
    mMarkerLy.setVisibility(View.GONE);
    mBaiduMap.hideInfoWindow();
   }
  });
 }


 /********************************************
  * 初始化定位
  */
 private void initLocation() {
  //定位图层显示方式, 默认为 LocationMode.NORMAL 普通态--还有罗盘,跟随模式
  mLocationMode = LocationMode.NORMAL;
  //创建LocationClient,以及监听,以及设置定位监听
  mLocationClient = new LocationClient(this);
  mLocationListener = new MyLocationListener();
  mLocationClient.registerLocationListener(mLocationListener);

  //为locationClient进行必要的设置
  LocationClientOption option = new LocationClientOption();
  option.setCoorType("bd09ll");//设置百度经纬度坐标系格式
  option.setIsNeedAddress(true);//某处
  option.setOpenGps(true);//打开gps
  option.setScanSpan(1000);//每隔多少秒请求
  mLocationClient.setLocOption(option);//设置必要的参数
  // 视图展现的时候,先初始化一个自定义图标
  mIconLocation = BitmapDescriptorFactory
    .fromResource(R.drawable.navi_map_gps_locked);
  //传感器对象监听
  myOrientationListener = new MyOrientationListener(context);

  //监听到改变时候,进行赋最新的值x值
  myOrientationListener
    .setOnOrientationListener(new OnOrientationListener() {
     @Override
     public void onOrientationChanged(float x) {
      mCurrentX = x;
     }
    });

 }
 private class MyLocationListener implements BDLocationListener {
  @Override
  public void onReceiveLocation(BDLocation location) {

   //创建的位置数据
   MyLocationData data = new MyLocationData.Builder()//
     .direction(mCurrentX)//
     .accuracy(location.getRadius())//
     .latitude(location.getLatitude())//
     .longitude(location.getLongitude())//
     .build();
   mBaiduMap.setMyLocationData(data);
   // 设置自定义图标
   MyLocationConfiguration config = new MyLocationConfiguration(
     mLocationMode, true, mIconLocation);
   mBaiduMap.setMyLocationConfigeration(config);

   // 更新经纬度
   mLatitude = location.getLatitude();
   mLongtitude = location.getLongitude();
   //当用户第一次获取定位时候,定位到自己的位置
   if (isFirstIn) {
    LatLng latLng = new LatLng(location.getLatitude(),
      location.getLongitude());
    MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
    mBaiduMap.animateMapStatus(msu);
    isFirstIn = false;

    Toast.makeText(context, location.getAddrStr(),
      Toast.LENGTH_SHORT).show();
   }

  }
 }
 /**********************************************************
  * 初始化覆盖物
  */
 private void initMarker() {
  //初始化覆盖物控件
  mMarker = BitmapDescriptorFactory.fromResource(R.drawable.maker);
  mMarkerLy = (RelativeLayout) findViewById(R.id.id_maker_ly);
 }
 //____________________________________________________________________
 @Override
 protected void onResume() {
  super.onResume();
  // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
  mMapView.onResume();
 }

 @Override
 protected void onStart() {
  super.onStart();
  // 开启定位
  mBaiduMap.setMyLocationEnabled(true);
  if (!mLocationClient.isStarted())
   mLocationClient.start();
  // 开启方向传感器
  myOrientationListener.start();
 }

 @Override
 protected void onPause() {
  super.onPause();
  // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
  mMapView.onPause();
 }

 @Override
 protected void onStop() {
  super.onStop();

  // 停止定位
  mBaiduMap.setMyLocationEnabled(false);
  mLocationClient.stop();
  // 停止方向传感器
  myOrientationListener.stop();

 }

 @Override
 protected void onDestroy() {
  super.onDestroy();
  // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
  mMapView.onDestroy();
 }
 //____________________________________________________________________
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

 /**
  * 定位到我的位置
  */
 private void centerToMyLocation() {
  //创建最新的经度维度
  LatLng latLng = new LatLng(mLatitude, mLongtitude);
  MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
  //去移动到最新的位置上去
  mBaiduMap.animateMapStatus(msu);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.id_map_common:
   //普通
   mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
   break;

  case R.id.id_map_site:
   //卫星
   mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
   break;

  case R.id.id_map_traffic:
   //显示实时交通
   if (mBaiduMap.isTrafficEnabled()) {
    mBaiduMap.setTrafficEnabled(false);
    item.setTitle("实时交通(off)");
   } else {
    mBaiduMap.setTrafficEnabled(true);
    item.setTitle("实时交通(on)");
   }
   break;
  case R.id.id_map_location:
   //实现定位--我的位置
   centerToMyLocation();
   break;
  case R.id.id_map_mode_common:
   mLocationMode = LocationMode.NORMAL;
   break;
  case R.id.id_map_mode_following:
   mLocationMode = LocationMode.FOLLOWING;
   break;
  case R.id.id_map_mode_compass:
   mLocationMode = LocationMode.COMPASS;
   break;
  case R.id.id_add_overlay:
   addOverlays(Info.infos);
   break;
  default:
   break;
  }

  return super.onOptionsItemSelected(item);
 }

 /*********************************************
  * 添加覆盖物
  * 循环得到经纬度,得到图标
  * 根据MarkerOptions设置经纬度,设置图标
  * 讲marker携带info,完成地图上的添加
  * 
  */
 private void addOverlays(List<Info> infos) {
  //清屏
  mBaiduMap.clear();
  //经度维度
  LatLng latLng = null;
  //
  OverlayOptions options;
  //将marker放到地图上
  Marker marker = null;
  for (Info info : infos) {
   // 经纬度
   latLng = new LatLng(info.getLatitude(), info.getLongitude());
   // 图标--制定marker地图上的位置(图标,放到最上层为5)
   options = new MarkerOptions().position(latLng).icon(mMarker)
     .zIndex(5);
   //添加
   marker = (Marker) mBaiduMap.addOverlay(options);
   //marker携带值
   Bundle arg0 = new Bundle();
   arg0.putSerializable("info", info);
   marker.setExtraInfo(arg0);
  }

  //移动位置
  MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
  mBaiduMap.setMapStatus(msu);

 }



}


MyOrientationListener

package com.example.homebaimap;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

public class MyOrientationListener implements SensorEventListener {
 // 传感器管理工具
 private SensorManager mSensorManager;
 private Context mContext;
 // 传感器
 private Sensor mSensor;
 private float lastX;

 //获取环境变量
 public MyOrientationListener(Context context) {
  this.mContext = context;
 }

 // 开始监听
 @SuppressWarnings("deprecation")
 public void start() {
  //获取监听管理者
  mSensorManager = (SensorManager) mContext
    .getSystemService(Context.SENSOR_SERVICE);
  if (mSensorManager != null) {
   // 获得方向传感器--水平的这里用
   mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
  }

  //如果手指支持传感器
  if (mSensor != null) {
   /**
    * 注册方向改变监听--listener自己实现了传this即可,传感器,精度,
   onSensorChanged实现监听的方法
    */
   mSensorManager.registerListener(this, mSensor,
     SensorManager.SENSOR_DELAY_UI);
  }
 }

 // 结束监听
 public void stop() {
  mSensorManager.unregisterListener(this);
 }

 @Override
 public void onAccuracyChanged(Sensor arg0, int arg1) {
  // TODO Auto-generated method stub

 }

 // 传感器改变需要的回调方法
 @SuppressWarnings({ "deprecation" })
 @Override
 public void onSensorChanged(SensorEvent event) {
  //如果检测到方向改变
  if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
   //如果方向发生改变时候,event会携带一个类型--这里是水平,以及会携带三个数据xyz--这里是x值,并且获取x值
   float x = event.values[SensorManager.DATA_X];

   //发生变化
   if (Math.abs(x - lastX) > 1.0) {
    if (mOnOrientationListener != null) {
     //这里有一个接口方法,传入最新的x值
     mOnOrientationListener.onOrientationChanged(x);
    }
   }

   lastX = x;

  }
 }

 private OnOrientationListener mOnOrientationListener;

 public void setOnOrientationListener(
   OnOrientationListener mOnOrientationListener) {
  this.mOnOrientationListener = mOnOrientationListener;
 }

 public interface OnOrientationListener {
  void onOrientationChanged(float x);
 }

}

另外还有那个menu文件(无关痛痒的)

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/id_map_common"
        android:showAsAction="never"
        android:title="普通地图"/>
    <item
        android:id="@+id/id_map_site"
        android:showAsAction="never"
        android:title="卫星地图"/>
    <item
        android:id="@+id/id_map_traffic"
        android:showAsAction="never"
        android:title="实时交通(off)"/>
    <item
        android:id="@+id/id_map_location"
        android:showAsAction="never"
        android:title="我的位置"/>
    <item
        android:id="@+id/id_map_mode_common"
        android:showAsAction="never"
        android:title="普通模式"/>
    <item
        android:id="@+id/id_map_mode_following"
        android:showAsAction="never"
        android:title="跟随模式"/>
    <item
        android:id="@+id/id_map_mode_compass"
        android:showAsAction="never"
        android:title="罗盘模式"/>
    <item
        android:id="@+id/id_add_overlay"
        android:showAsAction="never"
        android:title="添加覆盖物">
    </item>

</menu>


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP