日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發(fā)布時(shí)間:2023/12/15 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android百度地图标方向,Android百度地图之方向感应和模式更改 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文實(shí)例為大家分享了Android百度地圖之方向感應(yīng)和模式更改,供大家參考,具體內(nèi)容如下

目標(biāo)效果:

菜單中設(shè)置幾種模式,點(diǎn)擊可查看不同的地圖形式,這里隨便截幾張圖。

1.首先要去百度地圖網(wǎng)站 http://lbsyun.baidu.com/

2.注冊賬號(hào)后,點(diǎn)擊開發(fā)->Android地圖SDK->獲取密鑰,進(jìn)入后顯示如下頁面。

3.創(chuàng)建應(yīng)用

4.打開eclipse,選擇Window->Preferences->Android->Build,獲取SHA1

5.提交后回到上一個(gè)Android地圖SDK頁面選擇相關(guān)下載,再點(diǎn)擊自定義下載

6.選擇定位功能,基礎(chǔ)地圖,檢索功能,LBS云檢索,計(jì)算工具后點(diǎn)擊開發(fā)包,示例代碼和類參考根據(jù)自己的實(shí)際情況進(jìn)行下載

7.下載完成后解壓如圖

8.開始創(chuàng)建應(yīng)用,注意創(chuàng)建時(shí)包名

9.創(chuàng)建好后,把剛才下載的libs目錄下所有內(nèi)容復(fù)制到項(xiàng)目libs文件夾中。

10.開始編寫代碼。activity_main.xml頁面放入一個(gè)map控件。

activity_main.xml頁面:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity" >

android:id="@+id/mv_map"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:clickable="true" />

11.main.xml作為菜單頁面,增加幾個(gè)模式選擇。

main.xml頁面:

android:id="@+id/id_map_common"

android:orderInCategory="100"

android:showAsAction="never"

android:title="普通地圖"/>

android:id="@+id/id_map_site"

android:orderInCategory="100"

android:showAsAction="never"

android:title="衛(wèi)星地圖"/>

android:id="@+id/id_map_traffic"

android:orderInCategory="100"

android:showAsAction="never"

android:title="實(shí)時(shí)交通(off)"/>

android:id="@+id/id_map_location"

android:orderInCategory="100"

android:showAsAction="never"

android:title="我的位置"/>

android:id="@+id/id_map_mode_common"

android:orderInCategory="100"

android:showAsAction="never"

android:title="普通模式"/>

android:id="@+id/id_map_mode_following"

android:orderInCategory="100"

android:showAsAction="never"

android:title="跟隨模式"/>

android:id="@+id/id_map_mode_compass"

android:orderInCategory="100"

android:showAsAction="never"

android:title="羅盤模式"/>

12.創(chuàng)建MyOrientationListener.java頁面用于在方向改變時(shí)進(jìn)行獲取。

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;

}

// 開啟監(jiān)聽

@SuppressWarnings("deprecation")

public void start() {

//獲得系統(tǒng)服務(wù)

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);//第三個(gè)參數(shù)為經(jīng)度

}

}

// 結(jié)束監(jiān)聽

public void stop() {

//停止定位

mSensorManager.unregisterListener(this);

}

// 經(jīng)度發(fā)生改變時(shí)

@Override

public void onAccuracyChanged(Sensor arg0, int arg1) {

}

// 緯度發(fā)生改變時(shí)

@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){

//通知主界面進(jìn)行回掉

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頁面進(jìn)行模式更改以及定位等。

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;

// 定位相關(guān)

private LocationClient mLocationClient;

private MyLocationListener mLocationListener;

private boolean isFirstIn = true;

private double mLatitude; // 記錄最新經(jīng)緯度

private double mLongtitude;

// 自定義定位圖標(biāo)

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方法之前實(shí)現(xiàn)

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);// 設(shè)置地圖放大比例

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執(zhí)行onResume時(shí)執(zhí)行mMapView. onResume (),實(shí)現(xiàn)地圖生命周期管理

mv_map.onResume();

}

@Override

protected void onPause() {

super.onPause();

// 在activity執(zhí)行onPause時(shí)執(zhí)行mMapView. onPause (),實(shí)現(xiàn)地圖生命周期管理

mv_map.onPause();

}

@Override

protected void onDestroy() {

super.onDestroy();

// 在activity執(zhí)行onDestroy時(shí)執(zhí)行mMapView.onDestroy(),實(shí)現(xiàn)地圖生命周期管理

mv_map.onDestroy();

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return super.onCreateOptionsMenu(menu);

}

// 點(diǎn)擊菜單進(jìn)行切換地圖

@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: // 衛(wèi)星地圖

baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

break;

case R.id.id_map_traffic: // 實(shí)時(shí)交通

if (baiduMap.isTrafficEnabled()) {

baiduMap.setTrafficEnabled(false);

item.setTitle("實(shí)時(shí)交通(off)");

} else {

baiduMap.setTrafficEnabled(true);

item.setTitle("實(shí)時(shí)交通(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();

// 判斷是否第一次進(jìn)入

if (isFirstIn) {

LatLng latLng = new LatLng(location.getLatitude(),

location.getLongitude());

MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);

baiduMap.animateMapStatus(msu);

isFirstIn = false;

}

// 設(shè)置自定義圖標(biāo)

MyLocationConfiguration config = new MyLocationConfiguration(

mLocationMode, true, mIconLocation);

baiduMap.setMyLocationConfigeration(config);

}

}

// 初始化定位

private void initLocation() {

mLocationMode = com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL; // 默認(rèn)模式

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);// 每個(gè)多少秒進(jìn)行一次請求

mLocationClient.setLocOption(option);

// 初始化圖標(biāo)

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頁面配置權(quán)限及添加AppKey。

Androidmanifest.xml頁面:

package="com.imooc.baidumap"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="17"

android:targetSdkVersion="19" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name="com.baidu.lbsapi.API_KEY"

android:value="3KjZS5ym9TXSm98V7bVjwZTZwAoajsgp" />

android:name="com.imooc.baidumap.MainActivity"

android:label="@string/app_name" >

android:name="com.baidu.location.f"

android:enabled="true"

android:process=":remote" >

android:name="com.baidu.location.service_v2.2">

15.程序運(yùn)行就可以顯示目標(biāo)效果了。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

總結(jié)

以上是生活随笔為你收集整理的android百度地图标方向,Android百度地图之方向感应和模式更改的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。