async function requestAndroidPermission(permissionID) {
const res = await 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
}
resolve(result);
},
function(error) {
console.log('申请权限错误:' + error.code + " = " + error.message);
resolve({
code: error.code,
message: error.message
});
}
);
});
return res
}
{
"version" : "1",
"prompt" : "template",
"title" : "隐私政策",
"message" : " 请您务必审慎阅读、充分理解“隐私政策”各条款,包括但不限于:为了更好的向您提供服务,我们需要收集您的设备标识、操作日志等信息用于分析、优化应用性能。<br/> 您可阅读<a href=\"xxx\">《隐私政策》</a>了解详细信息。如果您同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "暂不同意",
"hrefLoader" : "system",
"backToExit" : "false",
"second" : {
"title" : "温馨提示",
"message" : " 进入应用前,您需先同意<a href=\"xxx\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
"disagreeMode" : {
"support" : false,
"loadNativePlugins" : false,
"visitorEntry" : false,
"showAlways" : false
},
"styles" : {
"backgroundColor" : "#eeeeee",
"borderRadius" : "5px",
"title" : {
"color" : "#333333"
},
"buttonAccept" : {
"color" : "#333333"
},
"buttonRefuse" : {
"color" : "#333333"
},
"buttonVisitor" : {
"color" : "#333333"
}
}
}
2 个回复
Ask小助手
从你提供的详细反馈来看,这份 bug 报告的质量很高,问题描述、复现步骤和代码示例都比较清晰。作为官方人员,我对这份反馈进行如下评审:
1. 反馈内容完整性评审
plus.android.requestPermissions无回调),并且给出了临时解决方案(杀进程重启后恢复)。这为定位问题提供了非常关键的线索。requestAndroidPermission函数的Promise封装是标准的,业务逻辑清晰,能够直接用于问题分析。androidPrivacy.json文件内容完整,这是一个非常重要的信息。问题很可能就出在原生隐私弹窗的生命周期与权限请求 API 的时序交互上。结论:这是一份高质量的 bug 反馈,所有必要信息均已提供,无需额外补充。
2. BUG 是否成立分析
根据现有知识库和通用的 Android 开发知识,该 bug 成立。
androidPrivacy.json)和应用主界面的启动时序有关。在首次安装并同意隐私政策后,应用的Activity可能经历了一个特殊的生命周期变化或状态恢复过程,导致plus.android.requestPermissions所依赖的内部上下文或Fragment尚未完全就绪,从而无法正确发起权限请求并挂起回调。plus.globalEvent.addEventListener失效的 issue(issues.dcloud.net.cn/pages/issues/detail?id=17878)也提到了在特定生命周期(如onShow)中注册事件可能失效的问题,这与本问题中回调失效的现象有相似之处,可能指向了相似的生命周期处理缺陷。requestAndroidPermission调用前,增加一个微小的延迟(例如setTimeout延迟 100-300ms),看是否能规避此问题。这可以作为一个临时补丁。3. 基本概念判断
plus.android.requestPermissions是 App 平台(Android/iOS)特有的 API,在鸿蒙(HarmonyOS)平台上不支持app-plus相关内容。你的反馈明确指定了 Android 平台,因此使用此 API 是正确的。综合来看,这是一个非常明确的 bug,感谢你如此详尽的反馈。这将有助于我们提升产品在华为设备上的稳定性。
5***@qq.com (作者)
其他安卓手机均正常,只有华为手机会出现这种情况。
要回复问题请先登录或注册
公告
更多>相关问题