做过权限适配的都知道在比较新的vivo手机上(例如Vivo x9)i管家和设置里的权限管理已经合成一体,vivo手机默认把android原生的权限管理系统阉割了,调用原生的检查权限方法,都返回有权限,其实并没有。
i管家才是真正的权限管理者,当你的app使用到某个危险权限时候,i管家会自动弹出权限管理的弹框,向用户请求该权限,此过程不是我们开发者可控的,完全由i管家自动管理。
对于Vivo x9手机Gps开关获取到是关闭的原因,就是由此衍生出来的问题,当我们调用检查Gps开启方法时,如果位置权限被禁止
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
return gps;
你会发现即使已经打开了gps开关(位置),但是用代码获取到的永远返回false;
原因就是位置权限禁止导致的。