【问题标题】:Custom uses-permission with ionic 3离子 3 的自定义使用权限
【发布时间】:2019-02-13 16:21:18
【问题描述】:

在使用 Ionic3 (cordova 7.0.0 | android@6.2.3) 构建应用时,我需要使用麦克风、SIP 和互联网接入 (WI-FI)。

所以我尝试以这种方式使用 edit-config 编辑 config.xml:

<edit-config file="AndroidManifest.xml" mode="merge" targe="/manifest”>
<uses-permission android:name="android.permission.USE_SIP" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.webkit.PermissionRequest" />
<uses-feature android:name="android.hardware.sip.voip" />
<uses-feature android:name="android.hardware.wifi" android:required="true" />
<uses-feature android:name="android.hardware.microphone" android:required="true" />
</edit-config>

但没有显示请求。此外,我希望 AndroidManifest.xml 有更多的使用权限键(每个请求一个),但结果是一行只有 RECORD_AUDIO 的权限。

我做错了什么?

感谢您的回答。

【问题讨论】:

    标签: cordova ionic3 android-permissions cordova-android


    【解决方案1】:

    要添加这些权限,您需要使用&lt;config-file&gt; 而不是&lt;edit-config&gt;,例如:

        <config-file parent="/*" target="AndroidManifest.xml">
            <uses-permission android:name="android.permission.USE_SIP" />
            <uses-permission android:name="android.permission.RECORD_AUDIO" />
            <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
            <uses-permission android:name="android.webkit.PermissionRequest" />
            <uses-feature android:name="android.hardware.sip.voip" />
            <uses-feature android:name="android.hardware.wifi" android:required="true" />
            <uses-feature android:name="android.hardware.microphone" android:required="true" />
        </config-file>
    

    但这在 Android 6+ 上还不够 - 您需要为 dangerous permissions 请求 runtime permission

    在 Cordova 中,您可以使用 cordova-diagnostic-pluginrequestRuntimePermissions() 来执行此操作,例如:

    cordova.plugins.diagnostic.requestRuntimePermissions(function(statuses){
        for (var permission in statuses){
            switch(statuses[permission]){
                case cordova.plugins.diagnostic.permissionStatus.GRANTED:
                    console.log("Permission granted to use "+permission);
                    break;
                case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED:
                    console.log("Permission to use "+permission+" has not been requested yet");
                    break;
                case cordova.plugins.diagnostic.permissionStatus.DENIED:
                    console.log("Permission denied to use "+permission+" - ask again?");
                    break;
                case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS:
                    console.log("Permission permanently denied to use "+permission+" - guess we won't be using it then!");
                    break;
            }
        }
    }, function(error){
        console.error("The following error occurred: "+error);
    },[
        cordova.plugins.diagnostic.permission.USE_SIP,
        cordova.plugins.diagnostic.permission.RECORD_AUDIO
    ]);
    

    【讨论】:

    • 感谢您的回答。我还添加了 ionic-native/diagnostic 并使用 getMicrophoneAuthorizationStatus 检查授权,如果未授予,那么我希望使用 requestMicrophoneAuthorization() 显示请求。无论如何,我会尝试你的解决方案。
    • 我尝试了您的解决方案并工作了一半,因为 config.xml 的修复没问题,但 cordova.plugins 的代码不起作用。所以我使用了 Ionic (ionic-diagnostic) 的原生插件,这样就显示了请求。
    • cordova.plugins.diagnostic 是 Javascript 中插件的全局命名空间。但是,Ionic 是基于 Typescript 的,因此 ionic-diagnostic 为插件的 Javascript API 提供了一个 Typescript 包装器。
    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2016-03-29
    • 2013-09-28
    相关资源
    最近更新 更多