# LBS上报

**LBS说明**

本模块主要提供地理位置采集模块的接入方法，地理位置的采集有利于基于LBS相关功能的应用。\
MTA只会在App在前台运行的时候进行采集，并且有针对采集频率的自动控制策略。

## MTA Android SDK LBS

* 支持按照配置的时间或距离，持续性上报LBS信息

### 权限配置

在AndroidMenifest.xml添加LBS所需权限

```markup
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于访问wifi网络信息，wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
```

### LBS类说明

`StatGpsMonitor`: LBS功能类\
`StatGpsOption`: GPS配置类

### 初始化定位信息

方法

```java
/**
* 初始化LBS
* @param gpsOption GPS参数
*/
public void init(StatGpsOption gpsOption);
```

示例

```java
// 初始化context
StatService.setContext(context);
// 初始化MTA
StatService.registerActivityLifecycleCallbacks(this);

// 初GPS始化配置参数
StatGpsOption statGpsOption = new StatGpsOption();
statGpsOption.setMinTime(10); // GPS更新时间
statGpsOption.setMinDistance(1000);// GPS更新距离

// 初始化LBS环境
StatGpsMonitor.getInstance().init(statGpsOption);
```

#### GPS参数说明

```java
public class StatGpsOption {
    /**
     * 应用程序接收GPS更新的最短时间（即只有超过这个时间设定，系统才可能通知更新GPS数据）——单位毫秒
     *
     * @return 应用程序接收GPS更新的最短时间
     */
    public long getMinTime();

    /**
     * 设置GPS位置更新的最小时间单元，单位为毫秒，默认30*1000即10秒
     *
     * @param minTime
     */
    public void setMinTime(long minTime);

    /**
     * 应用程序接收GPS更新的最短距离（即只有超过这个距离，系统才可能通知更新GPS数据）——单位米
     *
     * @return 应用程序接收GPS更新的最短距离
     */
    public float getMinDistance();

    /**
     * 设置GPS位置更新的最小距离单元，单位为米，默认5米
     *
     * @param minDistance
     */
    public void setMinDistance(float minDistance);
}
```

### 启动LBS监控

启动并开始监控LBS，调用请，请确保相关的权限已经表态声明并动态申请（Android 6或以上）\
考虑到性能消耗，请在必要时才启用，并在适当的时机，调用stopMonitor退出\
方法

```java
/**
* 启动LBS监控
*/
public void startMonitor();
```

示例

```java
// 启动LBS监控
StatGpsMonitor.getInstance().startMonitor();
```

### 停止LBS监控

停止GPS监控和上报\
方法

```java
/**
* 停止LBS监控
*/
public void stopMonitor();
```

示例

```java
// 停止LBS监控上报
StatGpsMonitor.getInstance().stopMonitor();
```

### 获取最近一次位置

方法

```java
/**
* 获取最近LBS位置
* @return 最近LBS位置
*/
public Location getLastLocation();
```

示例

```java
// 获取最近一次位置
StatGpsMonitor.getInstance().getLastLocation();
```

## MTA iOS SDK LBS

### SDK的引用

#### 前置接入

首先参考《腾讯移动分析 iOS SDK 快速接入指南》和《腾讯移动分析 iOS SDK 接口使用说明》进行MTA的接入。

#### SDK的引入

然后在XCode中引用plugin目录下的mtalbs目录下的libmtalbs.a静态库。\
添加对系统的CoreLocation.framework的引用。

#### 地理位置的采集权限

iOS对系统的地理位置采集有权限控制，需要对info.list进行修改。

MTA需要配置的两个Key为:\
1.NSLocationAlwaysAndWhenInUseUsageDescription\
2.NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription

参考: [https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple\_ref/doc/uid/TP40009251-SW18](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW18)

#### 接口说明

**启动LBS采集**

```
-(void)start;
```

**停止LBS采集**

```
-(void)stop;
```
