顶!!!
更新的啥啊,修复完了都不测试吗? 最少3个alpha版本,都没测试出来吗?
官方示例都不能运行啊
plus.android.requestPermissions(['android.permission.ACCESS_FINE_LOCATION'], function(e){
if(e.deniedAlways.length>0){ //权限被永久拒绝
// 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启
console.log('Always Denied!!! '+e.deniedAlways.toString());
}
if(e.deniedPresent.length>0){ //权限被临时拒绝
// 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限
console.log('Present Denied!!! '+e.deniedPresent.toString());
}
if(e.granted.length>0){ //权限被允许
//调用依赖获取定位权限的代码
console.log('Granted!!! '+e.granted.toString());
}
}, function(e){
console.log('Request Permissions error:'+JSON.stringify(e));
});
6 个回复
DCMarvel
顶!!!
更新的啥啊,修复完了都不测试吗? 最少3个alpha版本,都没测试出来吗?
官方示例都不能运行啊
DCMarvel
还没确认BUG吗?Android 动态申请权限都没回调了!
DCloud_heavensoft
是和这个问题一样吗?https://ask.dcloud.net.cn/question/114645
DCMarvel
plus.android.requestPermissions 部分权限无弹窗响应,不知道是不是基座问题,有待测试
2021-01-05 10:07
DCMarvel
permissionExternalStorage once 本地基座不生效了吗?必须云打包才生效吗
2021-01-05 10:19
DCloud_Android_ST
HX基座测试没发现问题。可能与项目调用逻辑有关。有确认了一个类似的bug。通过你的描述看似与我们确认的一个bug有相同之处但不确定。你可以重新云打包测试是否正常
xiaoliao998 (作者)
明天云打包测试下,之前都是可以的,
2021-01-06 00:37
xiaoliao998 (作者)
云打包后,原问题,解决,但是又引出了另一个问题,就是如果用户永久拒绝定位权限,按照之前的方法
// Android权限查询
function requestAndroidPermission(permissionID, message) {
console.log('权限判断')
return new Promise((resolve, reject) => {
plus.android.requestPermissions(
[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
function(resultObj) {
var result = 0;
for (var i = 0; i < resultObj.granted.length; i++) {
var grantedPermission = resultObj.granted[i];
// console.log('已获取的权限:' + grantedPermission);
result = 1
}
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
var deniedPresentPermission = resultObj.deniedPresent[i];
// console.log('拒绝本次申请的权限:' + deniedPresentPermission);
result = 0
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
var deniedAlwaysPermission = resultObj.deniedAlways[i];
// console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
result = -1
}
// // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
if (result == -1) {
uni.showToast({
title: message,
position: 'bottom',
duration: 3000,
success: () => {
gotoAppPermissionSetting()
}
});
} else {
resolve(result);
}
},
function(error) {
console.log('申请权限错误:' + error.code + " = " + error.message);
resolve({
code: error.code,
message: error.message
});
}
);
});
}
出现的结果,是无限的去请求权限,无限卡死,整个手机都完蛋了
2021-01-08 00:58
xiaoliao998 (作者)
以前从来没有这种问题,不知道怎么搞的, 如果上述判断权限的方法,写在onShow() 里,权限一旦被永久拒绝后,按照上述代码,系统会通过调用gotoAppPermissionSetting(),引导用户去设置权限,但是会陷入死循环,整个手机都会反复的调用判断权限方法,又反复调用gotoAppPermissionSetting() 里面的方法,而如果权限判断方法写在onloading里,就没事,只会走一次,但如果业务场景,必须要求用户给予权限这种特定场景,就会陷入死循环
2021-01-08 01:09
DCloud_Android_ST
回复 xiaoliao998: 一直都不可以在onShow里触发权限申请 因为权限申请会触发onShow
2021-01-08 10:57
xiaoliao998 (作者)
回复 DCloud_Android_ST: 以前可以,以前完全没问题,我代码完全都没动过,那这种极端场景就无法处理了吗??
2021-01-08 14:22
DCloud_Android_ST
回复 xiaoliao998: 。。。我了解到的是一直不可以。别再onShow触发权限申请
2021-01-08 15:06
xiaoliao998 (作者)
回复 DCloud_Android_ST: 业务需要啊 老大,
2021-01-08 15:38
DCloud_Android_ST
回复 xiaoliao998: 你说的之前可以是什么版本。我也说了 我了解就是不能再onshow权限申请 会死循环的。你什么业务也不能这样玩
2021-01-08 18:41
xiaoliao998 (作者)
回复 DCloud_Android_ST: 我都不清楚什么版本了,感觉好像,2.9.8 版本,因为我最早测试过,所以很肯定,之前是没有问题的。业务的话,进入某页面,就判断权限是否开启,如果没有开启,引导开启啊。而不是onload一次性,因为这个页面是底部选项卡页面,只会触发一次onload , 很尴尬
2021-01-08 19:46
xiaoliao998 (作者)
回复 DCloud_Android_ST: 大哥,之前有一个更新的版本,支持了onShow 进行权限申请,更新到最新的3.1.8.20210407-alpha,又出现了无限死循环
2021-04-10 14:40
xiaoliao998 (作者)
回复 DCloud_Android_ST: 大佬帮忙看一下啊,最新3.1.8.20210407-alpha,又开始这个死样了,难受
2021-04-12 10:55
DCloud_Android_ST
回复 xiaoliao998: plus.android.requestPermissions一直都不可以在onshow申请权限 不用质疑
2021-04-12 12:20
xiaoliao998 (作者)
回复 DCloud_Android_ST: 我明明记得,之前好好的,现在更新了又不行了,你们之前有个版本--- App-Android平台 修复 页面生命周期 onshow 中调用 getLocation 可能会引起死循环的Bug,是不是这个bug又在这个版本中复现了,反正和我的这个比较像
2021-04-12 12:35
DCloud_Android_ST
回复 xiaoliao998: 修复的是模块内部申请权限 与plus.android.requestPermissions无关 这逻辑也好处理 你加个次数限制 查过3次就不申请了就行了
2021-04-12 12:39
芜湖 - 95后的页面仔
我也遇到了同样的问题,请问楼主解决了吗?
xiaoliao998 (作者) - null
建议排查下这个方法,
当权限被拒绝后,引导去开启,会无限死循环