gpt4 book ai didi

javascript - Ionic/Angular Diagnostic.requestRuntimePermission 如何? (文档不完整)

转载 作者:行者123 更新时间:2023-11-28 04:19:34 25 4
gpt4 key购买 nike

在我的应用程序中,我需要请求相机、音频输入(微型)和存储的权限。我猜想从 Android 6 开始,您必须在运行时请求这些权限才能获得访问权限。到目前为止,一切都很好。为此,您需要 Ionic 2 Cordova 插件“诊断”,可以在 here 找到该插件。 .

如您所见,此文档非常不完整。它仅显示如何获取蓝牙的当前状态。好吧,但是你实际上如何调用许可呢?您要返回什么状态才能使用开关/外壳。所有这些信息都是需要的,但这里不需要。

据我尝试,我发现存在某种diagnostic.requestRuntimePermission 函数。使用此功能,您可以执行以下操作:

           that.diagnostic.requestRuntimePermission('CAMERA')
.then((status) =>{
switch(status){
case "GRANTED":
console.log("Permission granted to use the camera");
break;
case "DENIED":
console.log("Permission denied to use the camera - ask again?");
break;
case "DENIED_ALWAYS":
console.log("Permission permanently denied to use the camera - guess we won't be using it then!");
break;
}
}).catch(e => console.error(e));

注意:这只是一个我认为可能看起来像的代码,但我不知道它是否有效。那么我们以相机权限为例来解决这个问题:要检查相机是否可用,我这样做:

let successCallback = (isAvailable) => { console.log('Is available? ' + isAvailable); };
let errorCallback = (e) => console.error(e);
that.diagnostic.isCameraAvailable().then(successCallback).catch(errorCallback);

之后,我必须获取相机的 AuthorizationSttus,以了解是否授予、拒绝甚至尚未请求权限。其工作原理如下:

 that.diagnostic.getCameraAuthorizationStatus()
.then((state) => {
switch(state){
/*HERE should I work with the State in order to request permission or not*/
}
}).catch(e => console.error(e));

在这一步我不知道该做什么了,因为我不知道我会在这里返回哪些状态。我认为是这样的:

 switch(status){
case "GRANTED":
console.log("Permission granted to use the camera");
break;
case "DENIED":
//Here should I now call the PermissionRequest function
console.log("Permission denied to use the camera - ask again?");
break;
case "DENIED_ALWAYS":
console.log("Permission permanently denied to use the camera - guess we won't be using it then!");
break;
}

这不起作用,但我认为一定是这样的。所以请帮助我并告诉我:

  • 此处返回哪些状态以及如何访问它

  • 如何正确使用diagnostics.requestRuntimePermission?

Here是具有相同问题的原始 Ionic2 论坛的链接。

最佳答案

我认为您使用了错误的cordova插件来请求运行时权限。 diganostics 插件旨在告诉您某些设备功能(例如相机)是否可用。我推荐Android Permissions plugin用于在运行时请求权限。请注意,还有一个 Ionic Native wrapper可用于插件。

编辑:要回答您的确切问题:根据Ionic Native wrapper class对于此插件,权限状态请求的响应将是以下对象属性之一:

permissionStatus: {
GRANTED: string;
DENIED: string;
NOT_REQUESTED: string;
DENIED_ALWAYS: string;
RESTRICTED: string;
GRANTED_WHEN_IN_USE: string;
};

在您的 Ionic 类中,您可以通过以下方式访问它,假设您通过以下方式在构造函数中注入(inject)了 ionic-native 类:

constructor(private diagnostic: Diagnostic){}

您可以像这样访问permissionStatus对象:

this.diagnostic.permissionStatus

随后您可以重写 switch-case 语句:

let permissionStatus = this.diagnostic.permissionStatus;
that.diagnostic.getCameraAuthorizationStatus()
.then((state) => {
switch(state){
case permissionStatus.GRANTED:
console.log("Permission granted to use the camera");
break;
case permissionStatus.DENIED:
//Here should I now call the PermissionRequest function
console.log("Permission denied to use the camera - ask again?");
break;
case permissionStatus.DENIED_ALWAYS:
console.log("Permission permanently denied to use the camera - guess
we won't be using it then!");
break;
}
}).catch(e => console.error(e));

对于请求,例如运行时的相机权限:

let permission = this.diagnostic.permission;
this.diagnostic.requestRuntimePermission(permission.CAMERA).then(
success => {
console.log('reuqestCameraAuthroization, success', success);
},
error => {
console.log('reuqestCameraAuthroization, error', error);
},
);

但我认为您不需要在permissionStatus.DENIED或permissionStatus.NOT_REQUESTED的情况下手动请求运行时权限,因为Ionic docs值得一提的是,如果您不使用“false”参数调用 getCameraAuthorizationStatus,则默认情况下它将请求运行时权限。

如果您不确定 Promise 的结果如何,您可以随时将其记录到控制台(例如 console.log(success))。并且您始终可以记录可注入(inject)的内容(在您的情况下为 this.diagnostic)以查看哪些公共(public)方法和对象可用。

关于javascript - Ionic/Angular Diagnostic.requestRuntimePermission 如何? (文档不完整),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45544642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com