# 入门指南
最后更新时间: 2021年08月16日
本指南是向 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 的应用项目。
- 启动 Android Studio。如果您看到 Welcome to Android Studio 对话框,请选择 Start a new Android Studio project,否则,请点击 Android Studio 菜单栏中的 File,然后点击 New->New Project,按提示输入您的应用名称、公司域和项目位置。 然后点击 Next。
- 选择您的应用所需的机型。 如果您不能确定自己的需要,只需选择 Phone and Tablet。然后点击 Next。
- 在“Add an activity to Mobile”对话框中选择 Empty Activity。 然后点击 Next。
- 按提示输入 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, "userId");
//泛舟服务监听器
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);
//获取100米内的人
ubiboatManager.getNearInfo(100, null);
} 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 构建您的应用,然后在设备或模拟器上显示结果。