# 注意事项

# 动态权限申请

Google在Android 6.0中引入了动态权限获取机制(Runtime Permission),使得Android的权限管理更加严格完善。 动态权限获取要求开发者在调用涉及相关权限的代码时,使用系统接口来动态得申请相应权限。

//SDK在Android 6.0及以上需要动态检测位置和读写权限如下: Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,

//以位置权限为例 ,检测权限
  if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED 
    &&  ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
          //已经授权
   } else {//没有权限
           ActivityCompat.requestPermissions(MainActivity.this, 
           new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 
           REQUEST_LOCATION_CODE);//申请授权

   }

// 在请求权限后,系统会弹出相应的Dialog提示用户授予权限,用户选择允许或拒绝后,会回调onRequestPermissionsResult方法。
@Override
public void onRequestPermissionsResult(int requestCode,  String[] permissions, int[] grantResults) {
      switch (requestCode) {
          case REQUEST_LOCATION_CODE:
              if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] ==PackageManager.PERMISSION_GRANTED) {
                  // Permission Granted 授予权限
                  //处理授权之后逻辑
                  
              } else {
                  // Permission Denied 权限被拒绝
             }
              break;
          default:
              break;
      }
      super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

在未获取到位置权限情况下,SDK无法有效使用。 开发者可以简单的使用系统API来判断用户是否打开了位置按钮,检测到系统版本为6.0,并且用户未打开按钮时,进行提示。

LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
  // 未打开位置开关,可能导致sdk无法使用,提示用户或做相应处理
}

# 读写文件

在安卓10申请了读写权限有时会出现还是不能读取文件,解决方法就是在AndroidManifest.xml文件中的application标签添加如下属性:android:requestLegacyExternalStorage="true"。

# http请求

运行 Android P 及以上系统的安卓设备运行targetSdkVersion 27及以上的APK 使用http请求会出现网络异常(CLEARTEXT communication ** not permitted by network security policy),针对此问题,可在androidmanifest.xml的 application标签上加入 android:usesCleartextTraffic="true"。

# 错误返回码

通过泛舟监听器UbiboatListener回调方法中baseUbiboatResp参数的getStatus 方法来获取错误返回码。各错误返回码的具体说明如下:

返回值 描述
1 正常
2 用户设备蓝牙关闭
3 没有读写权限
4 没有绑定泛舟服务
5 用户设备不支持低功耗蓝牙
6 没有传入context
7 请求没有查询到合适数据
8 请求的服务秘钥不匹配
9 服务异常
10 用户设备位置服务开关未打开
11 秘钥为空 没有配置秘钥
12 用户设备WIFI关闭

# 兼容性

支持 Android 4.4 及以上系统。