百度地图----->地图类型、定位模式、实时交通、我的位置、加入覆盖物、覆盖物详情及提示
在百度地图开发平台 http://developer.baidu.com/map/index.php?
title=androidsdk
进行创建应用,获取应用的AK,在进行下载BaiduLBS_Android.jar和armeabi--然后放于libs文件夹下。另外获取安全码
Android SDK安全码组成:数字签名+;+包名。(查看具体配置方法),创建应用,提交后,自己主动下发Ak(配置文件里用到)
以下是官方的提示:
第一步:在project里新建libs文件夹。将开发包里的baidumapapi_vX_X_X.jar复制到libs根文件夹下。将libBaiduMapSDK_vX_X_X.so复制到libs\armeabi文件夹下(官网demo里已有这两个文件。假设要集成到自己的project里,就须要自己加入),拷贝完毕后的project文件夹例如以下图所看到的;
1.JPG
第二步:在project属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。
通过以上两步操作后,您就能够正常使用百度地图SDK为您提供的所有功能了。
注意:因为adt插件升级。若您使用Eclipse adt 22的话,须要对开发环境进行对应的设置,方法例如以下:
1. 在Eclipse 中选中project。右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;
2. Project -> clean-> clean all .
以下也是官方的提示:
百度地图SDK为开发人员提供了便捷的显示百度地图数据的接口,通过下面几步操作。就可以在您的应用中使用百度地图数据:
第一步:创建并配置project(详细方法參见project配置部分的介绍);
第二步:在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的封装信息类,便于学习,没有从server获取)
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>
百度地图----->地图类型、定位模式、实时交通、我的位置、加入覆盖物、覆盖物详情及提示的更多相关文章
- iOS:后台定位并实时向服务器发送位置
第一步:开启后台模式,选中定位,选择project --> capabilities-->Backgorund Modes --> Location updates 如图: 第二步: ...
- 我的Android开发之路——百度地图开源工具获取定位信息
定位技术在现在的移动设备上是必不可少的,许多app都会使用定位功能. 通常定位方式有两种:GPS定位:网络定位. Android系统对这两种定位方式都提供了相应的API支持,但是因为google的网络 ...
- 使用百度地图开发一个导航定位demo-android学习之旅(77)
首先介绍如何导入百度地图 步骤(其实官方文档写的很清楚了)http://developer.baidu.com/map/index.php?title=androidsdk/guide/introdu ...
- 百度地图API的IP定位城市和浏览器定位(转)
百度地图API提供了Geolocation 和 LocalCity两个服务类. 这俩API可以分别供用户在JavaScript中进行定位和城市确认. 1 本质上,Geolocation这个类是使用了支 ...
- 如何利用【百度地图API】进行定位?非GPS定位
原文:如何利用[百度地图API]进行定位?非GPS定位 如果你可以上网,如果你有火狐浏览器,那么恭喜你.你能很容易使用以下代码进行定位! ------------------------------- ...
- 完整版百度地图点击列表定位到对应位置并有交互动画效果demo
1.前言 将地图嵌入到项目中的需求很多,好吧,我一般都是用的百度地图.那么今天就主要写一个完整的demo.展示一个列表,点击列表的任一内容,在地图上定位到该位置,并有动画效果.来来来,直接上demo ...
- HTML5调用百度地图API进行地理定位实例
自从HTML5的标准确定以后,越来越多的网站使用HTML5来进行开发.虽然对HTML5支持的浏览器不是很多,但是依然抵挡不了大伙对HTML5开发的热情.今天为大家带来的是使用HTML5调用百度地图AP ...
- Android学习笔记之使用百度地图实现地图控制
PS:吾之荣耀,离别已久. 学习内容: 1.实现地图控制. 2.百度地图开发的一些细节 1.实现地图控制: 这一篇主要写在百度地图上添加一些其他控制.上一篇书写了覆盖物的添加,地理编码和反 ...
- android studio高德地图的显示于定位(附带逆地理编码围栏)
首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息 网站:http://lbs.amap.com/api/android-sdk/guide/create-p ...
随机推荐
- spring Batch实现数据库大数据量读写
spring Batch实现数据库大数据量读写 博客分类: spring springBatchquartz定时调度批处理 1. data-source-context.xml <?xml v ...
- iOS 常见面试图总结2
1.请简述storyboard和xib的差别? 一个project中.能够有多个xib文件,一个xib文件相应着一个视图类控制器,和多个视图. 然而.使用 storyboard时,一个project仅 ...
- 又一次发现Oracle太美之glogin.sql
又一次发现Oracle太美之glogin.sql 刚開始接触Oracle的时候,有时候一登陆一个生产环境.常常会出现以下的情况: [oracle@rh64 app]$ sqlplus / as sys ...
- 两个NSMutableDictionary合并成一个NSMutableDictionary
解决方案: NSMutableDictionary *targetMutableDictionary = [mutableDictionary1 copy]; [targetMutableDictio ...
- [转]java多线程并发去调用一个类的静态方法安全性探讨
文章转自:https://blog.csdn.net/weibin_6388/article/details/50750035 这篇文章主要讲多线程对静态方法访问的数据安全性 总结如下: 1,java ...
- Linux中安装redis的phpredis扩展
下载phpredis扩展 http://pecl.php.net/package/redis wget http://pecl.php.net/get/redis-4.0.2.tgz 需要环境配置文件 ...
- 利用jqueryzoom实现图片放大镜效果
在你的页面中包含 jqzoom.css <link rel="stylesheet" href="your_path/jqzoom.css" type=& ...
- Android DrawerLayout设置左右侧滑菜单为全屏
我们可以在MainActivity中获取屏幕宽度后动态赋值给侧滑菜单. 在oncreate时 DisplayMetrics metric = new DisplayMetrics(); getWind ...
- intell-
intellect: n.[U, C] the ability to think in a logical way and understand things, especially at an ad ...
- 人人都是产品经理?关于PM你不知道的还有很多
产品经理的职称最早出现在P&G宝洁公司,因效果非常显著,许多企业纷纷仿而效尤.硅谷知名的产品管理大师Marty Cagan在<Inspired: How To Create Produc ...