分类:C#、Android、VS2015;

创建日期:2016-03-04

一、简介

第3章已经介绍过百度定位SDK,这里再演示一遍其基本用法。

二、示例2—百度定位服务基本用法

运行截图

设计步骤

1、添加ch1802Main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/location_info"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<com.baidu.mapapi.map.TextureMapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
</LinearLayout>

2、添加ch1802MainActivity.cs文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Android.App;
using Android.OS;
using Android.Widget;
using Android.Content.PM;
using Com.Baidu.Location;
using Com.Baidu.Mapapi.Map;
using Com.Baidu.Mapapi.Model; namespace MyDemos.SrcDemos
{
[Activity(Label = "【例18-2】百度定位服务基本用法",
ScreenOrientation = ScreenOrientation.Sensor,
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden)]
public class ch1802MainActivity : Activity, IBDLocationListener
{
TextView locationInfo;
LocationClient mLocationClient;
TextureMapView mMapView;
BaiduMap mBaiduMap;
bool isFirstLoc = true;// 是否首次定位 protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ch1802Main);
locationInfo = FindViewById<TextView>(Resource.Id.location_info);
// 地图初始化
mMapView = FindViewById<TextureMapView>(Resource.Id.bmapView);
mBaiduMap = mMapView.Map;
// 开启定位图层
mBaiduMap.MyLocationEnabled = true;
// 定位初始化
mLocationClient = new LocationClient(this);
mLocationClient.RegisterLocationListener(this);
InitLocation();
mLocationClient.Start(); MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.Compass;
BitmapDescriptor mCurrentMarker = null;
mBaiduMap.SetMyLocationConfigeration(
new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));
}
private void InitLocation()
{
LocationClientOption option = new LocationClientOption();
//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.IsIgnoreKillProcess = false;
//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
option.EnableSimulateGps = true;
mLocationClient.LocOption = option;
} //实现接口
public void OnReceiveLocation(BDLocation p0)
{
// map view 销毁后不再处理新接收的位置
if (p0 == null || mMapView == null) return; #region 模拟位置
//注意:在手机上运行应注释掉这段代码,否则定位就没有意义了
p0 = new BDLocation();
p0.LocationDescribe = "模拟的位置,目的是为了在模拟器中查看运行效果";
p0.Radius = 50;
p0.Latitude = MainActivity.MyLatLng.Latitude;
p0.Longitude = MainActivity.MyLatLng.Longitude;
#endregion 模拟位置 MyLocationData locData = new MyLocationData.Builder()
.Accuracy(p0.Radius)
// 此处设置开发者获取到的方向信息,顺时针0-360
.Direction(100).Latitude(p0.Latitude)
.Longitude(p0.Longitude).Build();
mBaiduMap.SetMyLocationData(locData);
if (isFirstLoc)
{
isFirstLoc = false;
LatLng ll = new LatLng(p0.Latitude, p0.Longitude);
MapStatusUpdate u = MapStatusUpdateFactory.NewLatLng(ll);
mBaiduMap.AnimateMapStatus(u);
} StringBuilder sb = new StringBuilder();
sb.AppendLine("latitude : " + p0.Latitude);
sb.AppendLine("lontitude : " + p0.Longitude);
sb.AppendLine("radius : " + p0.Radius);
switch (p0.LocType)
{
case BDLocation.TypeGpsLocation:
// GPS定位结果
sb.AppendLine("speed : " + p0.Speed);// 单位:公里/每小时
sb.AppendLine("satellite : " + p0.SatelliteNumber);
sb.AppendLine("height : " + p0.Altitude);// 单位:米
sb.AppendLine("direction : " + p0.Direction);// 单位度
sb.AppendLine("addr : " + p0.AddrStr);
sb.AppendLine("describe : gps定位成功");
break;
case BDLocation.TypeNetWorkLocation:
// 网络定位结果
sb.AppendLine("网络定位结果(addr) : " + p0.AddrStr);
//运营商信息
sb.AppendLine("运营商信息(operationers) : " + p0.Operators);
sb.AppendLine("describe : 网络定位成功");
break;
case BDLocation.TypeOffLineLocation:
// 离线定位结果
sb.AppendLine("describe : 离线定位成功,离线定位结果也是有效的");
break;
case BDLocation.TypeServerError:
sb.AppendLine("describe : 服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
break;
case BDLocation.TypeNetWorkException:
sb.AppendLine("describe : 网络不同导致定位失败,请检查网络是否通畅");
break;
case BDLocation.TypeCriteriaException:
sb.AppendLine("describe : 无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
break;
}
sb.AppendLine("locationdescribe: " + p0.LocationDescribe);// 位置语义化信息
locationInfo.Text = sb.ToString();
} protected override void OnPause()
{
mMapView.OnPause();
base.OnPause();
} protected override void OnResume()
{
mMapView.OnResume();
base.OnResume();
} protected override void OnDestroy()
{
// 退出时销毁定位
mLocationClient.Stop();
// 关闭定位图层
mBaiduMap.MyLocationEnabled = false;
mMapView.OnDestroy();
mMapView = null;
base.OnDestroy();
}
}
}

【Android】18.2 利用百度定位服务API实现位置跟踪的更多相关文章

  1. 定位服务API案例

    定位服务API案例 要使用定位服务API,需要确保设备已经下载并安装了HMS Core服务组件,并将Location Kit的SDK集成到项目中. 指定应用权限 Android提供了两种位置权限: A ...

  2. 利用百度文字识别API识别图像中的文字

      本文将会介绍如何使用百度AI开放平台中的文字识别服务来识别图片中的文字.百度AI开放平台的访问网址为:http://ai.baidu.com/ ,为了能够使用该平台提供的AI服务,你需要事先注册一 ...

  3. [android学习]__使用百度地图开放api编写地图定位app

    前言 在前面我已经记录关于如何使用百度地图api,以及如何配置相关的androidstudio配置了,接下来将记录如何使用百度地图api开发简单的地图定位apk,我将决定不定期持续更新本篇笔记,在每个 ...

  4. 安卓开发 利用百度识图api进行物体识别

    前文 之前的随笔中,已经通过相机或相册获取到了我们想要的图片,接下来进行识图api的配置工作.我使用的是百度的api,利用python获取信息,并在MainActivity中进行调用来输出信息. 一. ...

  5. android开发对应高德地图定位服务进度一

    进行android的高德地图开发首先需要进入高德地图的控制台进行注册登录.之后创建新的应用并且绑定软件得到相应的key. 这里面需要找到自己软件对应的多个SHA1.这里有发布版和调试版,以及对应的软件 ...

  6. 安卓开发 利用百度识图api进行物体识别(java版)

    之前的随笔中,已经实现了python版本调用api接口,之所以使用python是因为python比java要简洁. 但是我发现在使用过程中,chaquopy插件会弹出底部toast显示"un ...

  7. C#封装百度Web服务API处理包含(Geocoding API,坐标转换API)

    1.创建基础参数类 public static class BaiduConstParams { public const string PlaceApIv2Search = "http:/ ...

  8. Android Studio中利用JavaDoc生成项目API文档

    1. 在Android Studio中的菜单项中点击Generate JavaDoc

  9. Android list刷新后仍然定位到原来的位置,解决。

    问题: 有一个list,点击item时会做一些事情,然后重新加载数据,此时希望点击重新刷新后item还在原来的位置,而不是跳转到开头. 实现如下: 1.listview添加监听setOnScrollL ...

随机推荐

  1. 【解决】缺少libstdc++.so.6库的原因及解决的方法

    问题原因: 系统是64bit,该库是32bit的,在64bit系统上安装32bit库 解决的方法: 1. 查看哪个安装包包括该库:yum provides libstdc++.so.6    libs ...

  2. 拓展javascript内置函数

    1.获取字符串字节数 //获取字符串字节数 //方法一 /* */ String.prototype.getBytesLength = function () { var length = 0; fo ...

  3. Java从零开始学二十七(NumberFormat类)

    一.NumberFormat表示数字的格式化类 NumberFormat表示数字的格式化类,即:可以按照本地的风格习惯进行数字的显示. No. 方法 类型 描述 1 public static Loc ...

  4. Linux学习笔记——Ubuntu更新软件源

    0.前言     通过改动ubuntu软件源可提高apt命令下载安装软件的速度.     參考资料     [官方资料]--配置文件改动方法     [Ubuntu如何改动软件源地址]--使用ubun ...

  5. java多线程解决应用挂死的问题

    这两天为了定位JBOSS老是挂死的问题,学习了一下JAVA多线程方面的知识,在此总结一下 1.在Java程序中,JVM负责线程的调度.线程调度是指按照特定的机制为多个线程分配CPU的使用权. 调度的模 ...

  6. Laravel.log日志超级大!怎么办!

    备份项目,发现下载好久没有下载下来.提了网速还是下载了45分钟 解压,解压了25分钟. 想着以为是附件太多... 进入了upload发现也就几百兆. 想看里面内容又打不开...  Laravel 的日 ...

  7. 转:StdRegProv类所属方法的使用

    在root\default命名空间中的StdRegProv类(标准注册表提供程序)提供了下面16种方法,我们将陆续介绍这些方法的使用规则,并给出分别用WBscript和Powershell编写的例子. ...

  8. vb sendmessage 详解1

    SendMessage函数的常用消息及其应用(有点长,希望能对大家有所帮助)函数原型: Declare Function SendMessage Lib "user32" Alia ...

  9. loadrunner中log的使用初步总结

    1.log的设置方式 . 在 runtime setting中可以设置log的生成方式: 默认的log方式: Enable logging选中,log option是Send messages onl ...

  10. PHP中的一些安全配置

    PHP中的配置至关重要,包含php.ini的配置,还有系统权限的配置,一下是我总结的一些配置 一.PHP的模块 ./configure \ --with-libdir=lib64 \ --prefix ...