JPermission与极光推送同时使用引起的问题(华为6.0)

  1. 问题来源
    在他人项目中增加极光推送。添加成功后,在魅族5.1手机上运行无误。然后给到测试,点进app即闪退!!!

  2. 问题重现
    华为6.0手机

  3. 问题寻找
    期初并不知道华为6.0手机会隐藏日志,看了一圈log并没有有效信息(重点关注了Error日志 ,并没有注意Warn日志)。于是debug,到LoginActivity便crash。

    crash位置.png

    问题定位到这里,可是依旧不知道是什么问题。重新仔细查看log,发现了如下图的错误信息:
    虚假错误日志.png

java.lang.NullPointerException: Attempt to invoke virtual method 'int com.huawei.lcagent.client.LogCollectManager.getUserType()'

于是百度了下这个问题,说是华为6.0中LogCollectManager这个类会隐真实的日志信息

  1. 问题解决
    (1) 打开华为的日志信息
    在拨号界面输入 *#*#2846579#*#* 。进入工程菜单---后台设置----LOG设置---LOG开关 把几个复选框都勾选,这样就可以显示出log。
    20190123151351.png

    (2) 执行上一步,再次查看log发现如下信息:
    Unknown permission: android.permission.RECEIVE_USER_PRESENT
    真实错误日志.png

    (3) 查看项目中并没有配置此权限,想到新添加的极光推送,我采用的是jcenter 自动集成,此权限应该就是极光中的。根据日志提示,不识别此权限。因此问题回到开始debug处的代码。
    (4) JPermissionUtil 是一个开源项目中的类,用来处理6.0权限的。修改代码,成功解决问题。
  //直接添加项目中的所有权限
  JPermissionUtil.requestAllPermission(this);

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 改为如下代码 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  List excluePermission = new ArrayList<>();
  // 添加剔除掉的权限
  excluePermission.add("android.permission.RECEIVE_USER_PRESENT");
  JPermissionUtil.requestAllPermission(this, excluePermission);

参考链接:https://blog.csdn.net/qq_36317441/article/details/75112547

你可能感兴趣的:(JPermission与极光推送同时使用引起的问题(华为6.0))