# 入门指南

最后更新时间: 2021年01月22日

本指南是向 Android 应用添加泛舟服务的快速入门指南。

# 第 1 步:下载并安装 Android Studio

按照 Android Studio 编译器安装指南下载 (opens new window)安装 (opens new window) Android Studio。(注:下载地址为Google官方网站)

# 第 2 步:获取泛舟Key

使用泛舟在线 SDK 需要您在控制台获取Key (opens new window)

如果您第一次使用,可以按照获取 Key 指南注册生成泛舟 Key。

# 第 3 步:创建项目

按以下步骤新建一个 Empty Activity 的应用项目。

  1. 启动 Android Studio。如果您看到 Welcome to Android Studio 对话框,请选择 Start a new Android Studio project,否则,请点击 Android Studio 菜单栏中的 File,然后点击 New->New Project,按提示输入您的应用名称、公司域和项目位置。 然后点击 Next。
  2. 选择您的应用所需的机型。 如果您不能确定自己的需要,只需选择 Phone and Tablet。然后点击 Next。
  3. 在“Add an activity to Mobile”对话框中选择 Empty Activity。 然后点击 Next。
  4. 按提示输入 Activity 名称、布局名称和标题。 使用默认值即可。 然后点击 Finish。

# 第 4 步:下载并安装定位开发包

下载开发包并解压。 解压后,得到一个 jar 文件。

操作步骤具体请参考 开发指南中的 Android Stuido 的jar安装步骤。

# 第 5 步:Hello Ubiboat!

请查看 Android Studio 项目中的下列文件。

1、配置 AndroidManifest.xml 文件

默认情况下,AndroidManifest.xml 位于所设置项目目录main文件下。主要用于配置service服务和申请权限:

在application标签中声明service组件:

<service android:name="com.powerlbs.ubiboat.sdk.UbiboatService"
    android:enabled="true"
    android:foregroundServiceType="location">
</service>

在AndroidManifest.xml中配置权限:

<!-- 网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 <!-- 访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>    
<!-- 访问wifi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 获取运营商信息-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 获取wifi的获取权限-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- 写入数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读取扩展存储-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 上网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 蓝牙-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!--android 9.0上使用前台服务,需要添加权限-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!--在Android10.0系统上,当应用退到后台后为了保留对设备位置信息的访问权-->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

2、在主工程的build.gradle文件配置dependencies

dependencies {
//依赖okhttp3
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
//依赖fastjson
implementation 'com.alibaba:fastjson:1.1.70.android'
//app demo使用了动态授权框架
implementation 'pub.devrel:easypermissions:2.0.1'
}

3、实现获取附近的人

如下几行代码可以帮助您实现获取附近的人功能,您可以参考:

import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.EasyPermissions;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {

    private UbiboatManager ubiboatManager = null;
    private static final int RC_EXTERNAL_STORAGE = 0x01;//权限

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //在动态申请权限后初始化泛舟
        requestPermissionAndInitUbiboat();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (ubiboatManager != null) {
            ubiboatManager.destory();//销毁服务
        }
    }

    @AfterPermissionGranted(RC_EXTERNAL_STORAGE)
    public void requestPermissionAndInitUbiboat() {
        if (EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION)) {
            //泛舟服务对象赋值
            ubiboatManager = UbiboatManager.getInstance(MainActivity.this, "appid", "lisi");
            //泛舟服务监听器
            UbiboatListener ubiboatListener=new UbiboatListener() {
                @Override
                public void onUbiboatResp(BaseUbiboatResp var) {
                    if (var != null) {
                        LogDebug.i(TAG, "resp:" + JSON.toJSONString(var));
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                tvResult.setText("resp:" + JSON.toJSONString(var));
                            }
                        });

                    }
                }
            };
            //绑定监听器
            ubiboatManager.registerUbiboatListener( ubiboatListener);
            //获取1000米内的人员
            ubiboatManager.getNearPoi(1000, NearInfoReq.Type.PERSON);
        } else {
            EasyPermissions.requestPermissions(this, "", RC_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.ACCESS_COARSE_LOCATION);
        }
    }


    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms) {

    }

    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms) {
        for (String perm : perms) {
            if (perm.equals(Manifest.permission.READ_EXTERNAL_STORAGE)
                    || perm.equals(Manifest.permission.ACCESS_FINE_LOCATION)
                    || perm.equals(Manifest.permission.ACCESS_COARSE_LOCATION)
                    || perm.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                new AlertDialog.Builder(this)
                        .setCancelable(true)
                        .setTitle("温馨提示")
                        .setMessage("需要开启您手机的相关权限,是否现在开启")
                        .setPositiveButton("去开启", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                startActivity(new Intent(Settings.ACTION_APPLICATION_SETTINGS));
                            }
                        })
                        .setNegativeButton("取消", null).show();
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

}

# 第 6 步:连接 Android 设备

了解您的应用实际运行情况的最简单方法是将 Android 设备与计算机相连。 按照说明在您的 Android 设备上启用开发者选项,并配置您的应用和系统以检测设备。

# 第 7 步:构建和运行您的应用

在 Android Studio 中,点击 Run 菜单选项(或 play 按钮图标)运行您的应用。 选择与您的计算机相连的 Android 设备 , Android Studio 将调用 Gradle 构建您的应用,然后在设备或模拟器上显示结果。