安卓学习笔记:让自己显示在地图上(使用百度地图API)

来源:互联网 发布:多益网络有什么游戏 编辑:程序博客网 时间:2024/05/04 05:57

申请秘钥

百度地图开放平台:http://lbsyun.baidu.com/

注册登录后,点击下方的申请秘钥

点击创建应用

应用类型选择 Android SDK,这时候需要填写发布版SHA1,其获取方法如下:

  • 打开命令行: win-R
  • 切换目录到 .android:cd .android
  • 获取三种指纹证书:keytool -list -v -keystore debug.keystore
  • 输入秘钥库口令:android

按照以上步骤就可以获取SHA1了:
SHA1

输入SHA1以及包名,点击创建即可!

完成以上之后,我们就可以获取秘钥了:
新应用

获取要用到的SDK

进入下载页面:

SDK下载

选择自己需要的功能并下载

下载SDK

获取到SDK之后我们就可以把它加入到自己的项目了。

加入到自己的应用(Android Studio)

添加定位所需的权限

    <!--添加权限-->    <!--该权限用于网络定位-->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>    <!--这个权限用于访问GPS-->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <!--获取运营商信息,用于支持提供运营商信息的相关接口-->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>    <!--用于读取当前手机的状态-->    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <!--访问网络-->    <uses-permission android:name="android.permission.INTERNET"/>

配置申请的秘钥

     <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">         <!--配置申请的秘钥-->         <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="这里输入你申请的秘钥(一串英文字母)"/>        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>

加入SDK到项目

打开我们下载的SDK中 libs 的目录,里面内容如下:
libs目录下文件

全部复制(包括上面文件夹)到我们项目中的libs目录下,如下:
lib目录

添加数据源集,就是把上面文件添加到项目:
在build.gradle文件中添加如下代码:

android {    compileSdkVersion 24    buildToolsVersion "24.0.1"    defaultConfig {        applicationId "com.example.locationapplication"        minSdkVersion 19        targetSdkVersion 22        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    //    添加的代码    sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }    //end}

写一个简单的DEMO

接下来我们就来写一个简单的demo来让我们自己显示在地图上:

activity_main.xml中代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"><TextView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:padding="2dp"    android:text="@string/app_name"/>    <com.baidu.mapapi.map.MapView        android:id="@+id/mv_map"        android:layout_width="match_parent"        android:layout_height="match_parent"/></LinearLayout>

MainActivity.java中的代码如下:

package com.example.locationapplication;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.graphics.Color;import android.graphics.Point;import android.os.Bundle;import android.view.View;import android.widget.Button;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.InfoWindow;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.MyLocationData;import com.baidu.mapapi.model.LatLng;import java.util.ArrayList;import java.util.List;/** * Created by 白芷 * 时间:2017/03/12 */public class MainActivity extends Activity {    //地图控件    public MapView mapView = null;    //百度地图对象    public BaiduMap baiduMap = null;    //定位相关声明    public LocationClient locationClient = null;    //自定义图标    BitmapDescriptor mCurrentMarket = null;    //是否首次定位    boolean isFirstLoc = true;    //得到经纬度    private double longitude;    private double latitude;    private MyLocationListener myLitenner = new MyLocationListener();    private class MyLocationListener implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            longitude = location.getLongitude();            latitude = location.getLatitude();            boolean isLocateFailed = false;//定位是否成功            //MAP VIEW 销毁后不在处理新接收的位置            if (location == null || mapView == null)                return;            MyLocationData locData = new MyLocationData.Builder()                    //此处设置开发者获取到的方向信息,顺时针0-360                    .accuracy(location.getRadius())                    .direction(100).latitude(location.getLatitude())                    .longitude(location.getLongitude()).build();            baiduMap.setMyLocationData(locData);            //设置定位数据            if (isFirstLoc) {                isFirstLoc = false;                LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());                MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngZoom(ll, 16);                //设置地图中心点以及缩放级别                baiduMap.animateMapStatus(mapStatusUpdate);            }        }        @Override        public void onConnectHotSpotMessage(String s, int i) {        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //在使用SDK个组件之前初始化context信息,传入ApplicationContext        //注意改方法在在setContextView方法之前实现        SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.activity_main);        initView();        initData();    }    private void initData() {        locationClient.start();//开始定位        baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);//设置为一般地图        //baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);//设置为卫星地图        baiduMap.setTrafficEnabled(true);//开启交通图    }    private void initView() {        mapView = (MapView) findViewById(R.id.mv_map);        baiduMap = mapView.getMap();        //开启定位图层        baiduMap.setMyLocationEnabled(true);        locationClient = new LocationClient(getApplicationContext());//实例化LocationClient类        locationClient.registerLocationListener(myLitenner);//注册监听函数        this.setLocationOption();//设置定位参数    }    //三个状态实现地图生命周期管理    @Override    protected void onDestroy() {        //退出销毁        locationClient.stop();        baiduMap.setMyLocationEnabled(false);        super.onDestroy();        mapView.onDestroy();        mapView = null;    }    @Override    protected void onResume() {        super.onResume();        mapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        mapView.onPause();    }    /**     * 设置定位参数     */    private void setLocationOption() {        LocationClientOption option = new LocationClientOption();        option.setOpenGps(true);//打开GPS        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//设置定位模式        option.setCoorType("bd0911");//返回的定位结果是百度经纬度,默认值是gcj02        option.setScanSpan(5000);//设置发起定位请求的时间间隔为5000ms        option.setIsNeedAddress(true);//返回的定位结果包含地址信息        option.setNeedDeviceDirect(true);// 返回的定位信息包含手机的机头方向        locationClient.setLocOption(option);    }}

上面就是一个简单的例子了。

运行效果

运行效果

看到运行效果,定位为图中的一个蓝色的点,而其实本人真正的位置是箭头指向的位置,所以说定位的精确度还并不是那么精确,后续还要我们继续优化代码!

1 0
原创粉丝点击