android 百度地图开发

简介: package sposition.webjoy.net.sendposition; import android.os.Bundle; import android.support.design.
package sposition.webjoy.net.sendposition;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
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.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.model.LatLng;

public class MainActivity extends AppCompatActivity {
    private  MapView mMapView = null;
    private BaiduMap baiduMap;
    //定位相关
    private LocationClient locationClient;
    private BDLocationListener bdLocationListener;
    private Boolean isFirstIn = true;//设置用户默认位置
    //记录经纬度
    private double mLatitude;
    private double mlongtitude;

    //自定义图标
    private BitmapDescriptor mIconLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                centerToMyLocation(mLatitude, mlongtitude);
            }
        });
        //初如化地图
        initValue();
        //定位初始化 
        initPosition();

    }

    /**
     * 定位到我的位置
     * @param mLatitude
     * @param mlongtitude
     */
    private void centerToMyLocation(double mLatitude, double mlongtitude) {
        LatLng latLng = new LatLng(mLatitude, mlongtitude);
        MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
        baiduMap.animateMapStatus(msu);//重新设置位置
    }

    private void initPosition() {
            locationClient = new LocationClient(this);
            bdLocationListener = new MyLocationListener();
            locationClient.registerLocationListener(bdLocationListener);
            LocationClientOption clientOption = new LocationClientOption();
            clientOption.setCoorType("bd09ll");
            clientOption.setIsNeedAddress(true);    //返回位置
            clientOption.setOpenGps(true);//开启GPS
            clientOption.setScanSpan(1000);
            locationClient.setLocOption(clientOption);
            //定位图标
            mIconLocation = BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked);

    }

    private void initValue() {
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);

        baiduMap = mMapView.getMap();
        MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15.0f);
        baiduMap.setMapStatus(mapStatusUpdate);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        switch (id){
            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);
                }else{
                    baiduMap.setTrafficEnabled(true);
                }
            }
            break;
        }

        return super.onOptionsItemSelected(item);
    }

    @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();
    }
    /**
     * 定义一个监听类
     */
    private class MyLocationListener implements BDLocationListener{
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            //定位成功后的回调
            MyLocationData data = new MyLocationData.Builder()//
                    .accuracy(bdLocation.getRadius())//精定
                    .latitude(bdLocation.getLatitude())//方向
                    .longitude(bdLocation.getLongitude())
                    .build();
            baiduMap.setMyLocationData(data);
            //自定义图标
            MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL,true,mIconLocation);
            baiduMap.setMyLocationConfigeration(config);

            mLatitude = bdLocation.getLatitude();
            mlongtitude = bdLocation.getLongitude();

            if (isFirstIn){
                //得到经度和纬度
                centerToMyLocation(bdLocation.getLatitude(), bdLocation.getLongitude());
                isFirstIn = false;
                Toast.makeText(MainActivity.this,"定位成功"+bdLocation.getAddrStr(),Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        baiduMap.setMyLocationEnabled(true);//开启定位
        if (!locationClient.isStarted()) {
            locationClient.start();
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        //不允许定位
        baiduMap.setMyLocationEnabled(false);
        locationClient.stop();
    }
}

 

目录
相关文章
|
8天前
|
存储 开发工具 Android开发
探索安卓开发:从新手到专家的旅程
【8月更文挑战第24天】在这个数字时代,安卓开发不仅仅是一个技能,它更像是一扇打开无限可能世界的大门。无论你是编程新手还是资深开发者,掌握安卓开发的精髓都能为你带来意想不到的机遇和挑战。本文将通过浅显易懂的语言和实际代码示例,引导你了解安卓开发的基础知识,探索其深层次的技术和应用,并激发你对这一领域的思考和热情。让我们一起踏上这段充满创新和发现的旅程吧!
|
2天前
|
测试技术 Linux Android开发
探索安卓开发之旅:从初学者到专家
【8月更文挑战第29天】本文是一篇为初学者和有一定经验的开发者准备的安卓开发指南。我们将从基础概念开始,逐步深入到高级主题,如自定义视图、性能优化等。无论你是刚刚入门,还是希望提升自己的技能,这篇文章都将为你提供有价值的信息和建议。让我们一起踏上这段激动人心的旅程吧!
|
1天前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
2天前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
1天前
|
XML 搜索推荐 Android开发
安卓开发中的自定义View组件实践
【8月更文挑战第30天】探索Android世界,自定义View是提升应用界面的关键。本文以简洁的语言带你了解如何创建自定义View,从基础到高级技巧,一步步打造个性化的UI组件。
|
2天前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!
|
3天前
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。
|
6天前
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
|
7天前
|
IDE Java 开发工具
探索安卓开发之旅:打造你的第一款App
【8月更文挑战第24天】在这篇文章中,我们将一起踏上激动人心的安卓开发之旅。不论你是编程新手还是希望扩展技能的老手,本文将为你提供一份详尽指南,帮助你理解安卓开发的基础知识并实现你的第一个应用程序。从搭建开发环境到编写“Hello World”,每一步都将用浅显易懂的语言进行解释。那么,让我们开始吧!
|
9天前
|
IDE 开发工具 Android开发
探索iOS与安卓开发的差异:平台选择对项目成功的影响
【8月更文挑战第22天】在数字化时代,移动应用成为企业和个人展示创意、提供服务的重要工具。iOS和安卓作为两大主流平台,各自拥有独特的优势和限制。本文将深入探讨这两个平台在开发过程中的主要差异,以及这些差异如何影响项目规划、用户体验和市场策略。通过比较分析,旨在为开发者和企业决策者提供有价值的见解,帮助他们根据项目需求做出明智的平台选择。
下一篇
云函数