Android百度地图之方向感应和模式更改

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android百度地图之方向感应和模式更改脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例为大家分享了AndROId百度地图之方向感应和模式更改,供大家参考,具体内容如下

目标效果:

Android百度地图之方向感应和模式更改

菜单中设置几种模式,点击可查看不同的地图形式,这里随便截几张图。

1.首先要去百度地图网站 http://LBSyun.baidu.COM/

2.注册账号后,点击开发->Android地图SDK->获取密钥,进入后显示如下页面。

Android百度地图之方向感应和模式更改

3.创建应用

Android百度地图之方向感应和模式更改

4.打开eclipse,选择Window->PReferences->Android->Build,获取SHA1

Android百度地图之方向感应和模式更改

5.提交后回到上一个Android地图SDK页面选择相关下载,再点击自定义下载

6.选择定位功能,基础地图,检索功能,LBS检索,计算工具后点击开发包,示例代码和类参考根据自己的实际情况进行下载

7.下载完成后解压如图

Android百度地图之方向感应和模式更改

8.开始创建应用,注意创建时包名

Android百度地图之方向感应和模式更改

9.创建好后,把刚才下载的libs目录下所有内容复制到项目libs文件夹中。

10.开始编写代码。activITy_main.XMl页面放入一个map控件。

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" >    <com.baidu.mapapi.map.Mapview    android:id="@+id/mv_map"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:clickable="true" /> </RelativeLayout>

11.main.xml作为菜单页面,增加几个模式选择。

main.xml页面:

 <;menu xmlns:android="http://schemas.android.com/apk/res/android" >     <item     android:id="@+id/id_map_common"     android:orderInCategory="100"     android:showAsAction="never"     android:title="普通地图"/>   <item     android:id="@+id/id_map_site"     android:orderInCategory="100"     android:showAsAction="never"     android:title="卫星地图"/>   <item     android:id="@+id/id_map_traffic"     android:orderInCategory="100"     android:showAsAction="never"     android:title="实时交通(off)"/>   <item     android:id="@+id/id_map_location"     android:orderInCategory="100"     android:showAsAction="never"     android:title="我的位置"/>   <item     android:id="@+id/id_map_mode_common"     android:orderInCategory="100"     android:showAsAction="never"     android:title="普通模式"/>   <item     android:id="@+id/id_map_mode_following"     android:orderInCategory="100"     android:showAsAction="never"     android:title="跟随模式"/>   <item     android:id="@+id/id_map_mode_compass"     android:orderInCategory="100"     android:showAsAction="never"     android:title="罗盘模式"/>   </menu>

12.创建MyorientationListener.java页面用于在方向改变时进行获取。

MyOrientationListener.java页面:

 package com.imooc.baidumap;   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 context;  private Sensor mSensor;// 传感器    private float lastX;    public MyOrientationListener(Context context) {  this.context = context;  }    // 开启监听  @SupPressWarnings("deprecation")  public void start() {  //获得系统服务  mSensorManager=(SensorManager) context.getSystemService(Context.SENSOR_SERVICE);  if(mSensorManager!=null){   //获得方向传感器   mSensor=mSensorManager.getdefaultsensor(Sensor.TYPE_ORIENTATION);  }  if(mSensor!=null){   mSensorManager.registerListener(this, mSensor,SensorManager.SENSOR_DELAY_UI);//第三个参数为经度  }  }    // 结束监听  public void stop() {  //停止定位  mSensorManager.unregisterListener(this);  }    // 经度发生改变时  @override  public void onAccuracyChanged(Sensor arg0, int arg1) {    }    // 纬度发生改变时  @Override  public void onSensorChanged(SensorEvent event) {  //如果事件返回的类型是方向传感器  if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){   float x=event.values[SensorManager.DATA_X];   //如果变化大于一度   if(Math.abs(x-lastX)>1.0){   //通知主界面进行回掉   if(mOnOrientationListener!=null){    mOnOrientationListener.onOrientationChanged(x);   }   }   lastX=x;  }  }      private OnOrientationListener mOnOrientationListener;    public void setmOnOrientationListener(   OnOrientationListener mOnOrientationListener) {  this.mOnOrientationListener = mOnOrientationListener;  }    //回掉接口  public interface OnOrientationListener{  void onOrientationChanged(float x);  } }

13.主页面MainActivity.java页面进行模式更改以及定位等。

MainActivity.java页面:

 package com.imooc.baidumap;   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; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MyLocationconfiguration; 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.model.LatLng; import com.imooc.baidumap.MyOrientationListener.OnOrientationListener;   import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.view.Window;   public class MainActivity extends Activity {    private MapView mv_map;  private BaiduMap baiduMap;    // 定位相关  private LocationClient mLocationClient;  private MyLocationListener mLocationListener;  private boolean isFirstIn = true;  private double mLatitude; // 记录最新经纬度  private double mLongtitude;    // 自定义定位图标  private BitmapDescriptor mIconLocation;  private MyOrientationListener mOrientationListener;  private float mcurrentX;    // 模式变量  private com.baidu.mapapi.map.MyLocationConfiguration.LocationMode mLocationMode;    @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);    // 在使用SDK各组件之前初始化context信息,传入ApplicationContext  // 注意该方法要再setContentView方法之前实现  SDKInitializer.initialize(getApplicationContext());  setContentView(R.layout.activity_main);    // 初始化控件  init();    // 初始化定位  initLocation();  }    // 初始化控件  private void init() {  mv_map = (MapView) findViewById(R.id.mv_map);  baiduMap = mv_map.getMap();  MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);// 设置地图放大比例  baiduMap.setMapStatus(msu);  }    @Override  protected void onStart() {  super.onStart();  baiduMap.setMyLocationEnabled(true);  if (!mLocationClient.isStarted()) {   // 开启定位   mLocationClient.start();   // 开启方向传感器   mOrientationListener.start();  }  }    @Override  protected void onStop() {  super.onStop();  baiduMap.setMyLocationEnabled(false);  // 停止定位  mLocationClient.stop();  // 停止方向传感器  mOrientationListener.stop();  }    @Override  protected void onResume() {  super.onResume();  // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  mv_map.onResume();  }    @Override  protected void onPause() {  super.onPause();  // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  mv_map.onPause();    }    @Override  protected void onDestroy() {  super.onDestroy();  // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  mv_map.onDestroy();  }    @Override  public boolean onCreateOptionsMenu(Menu menu) {  getMenuInflater().inflate(R.menu.main, menu);  return super.onCreateOptionsMenu(menu);  }    // 点击菜单进行切换地图  @Override  public boolean onOptionsItemSelected(MenuItem item) {  switch (item.getItemId()) {  case R.id.id_map_common: // 普通地图   baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);   break;    case R.id.id_map_site: // 卫星地图   baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);   break;    case R.id.id_map_traffic: // 实时交通   if (baiduMap.isTrafficEnabled()) {   baiduMap.setTrafficEnabled(false);   item.setTitle("实时交通(off)");   } else {   baiduMap.setTrafficEnabled(true);   item.setTitle("实时交通(on)");   }   break;  case R.id.id_map_location:   centerToMyLocat();   break;  case R.id.id_map_mode_common:   mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL;   break;  case R.id.id_map_mode_following:   mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.FOLLOWING;   break;  case R.id.id_map_mode_compass:   mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.COMPASS;   break;  default:   break;  }  return super.onOptionsItemSelected(item);  }    // 定位到我的位置  private void centerToMyLocat() {  LatLng latLng = new LatLng(mLatitude, mLongtitude);  MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);  baiduMap.aniMATEMapStatus(msu);  }    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();   baiduMap.setMyLocationData(data);     // 更新位置   mLatitude = location.getLatitude();   mLongtitude = location.getLongitude();   // 判断是否第一次进入   if (isFirstIn) {   LatLng latLng = new LatLng(location.getLatitude(),    location.getLongitude());   MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);   baiduMap.animateMapStatus(msu);     isFirstIn = false;   }   // 设置自定义图标   MyLocationConfiguration config = new MyLocationConfiguration(    mLocationMode, true, mIconLocation);   baiduMap.setMyLocationConfigeration(config);  }  }    // 初始化定位  private void initLocation() {  mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL; // 默认模式  mLocationClient = new LocationClient(this);  mLocationListener = new MyLocationListener();  mLocationClient.registerLocationListener(mLocationListener);    LocationClientOption option = new LocationClientOption();  option.setCoorType("bd0911");  option.setIsNeedAddress(true);  option.setOpenGps(true);  option.setScanSpan(1000);// 每个多少秒进行一次请求    mLocationClient.setLocOption(option);  // 初始化图标  mIconLocation = BitmapDescriptorFactory.FromResource(R.drawable.arrow);    mOrientationListener = new MyOrientationListener(this);    mOrientationListener   .setmOnOrientationListener(new OnOrientationListener() {      @Override    public void onOrientationChanged(float x) {    mCurrentX = x;    }   });  }   }

14.Androidmanifest.xml页面配置权限及添加AppKey。

Androidmanifest.xml页面:

 <&#63;xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"   package="com.imooc.baidumap"   android:versionCode="1"   android:versionName="1.0" >     <uses-sdk     android:minSdkVersion="17"     android:targetSdkVersion="19" />     <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" />   <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="3KjZS5ym9TXSm98V7bVjwZTZwAoajsgp" /><!-- 创建应用的AppKey -->       <activity       android:name="com.imooc.baidumap.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>

15.程序运行就可以显示目标效果了。

android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android百度地图之方向感应和模式更改全部内容,希望文章能够帮你解决Android百度地图之方向感应和模式更改所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。