Пользовательское использование-разрешение с ионной 3 - PullRequest
0 голосов
/ 13 февраля 2019

В сборках приложений с Ionic3 (cordova 7.0.0 | android@6.2.3) мне нужно использовать микрофон, SIP и доступ в интернет (WI-FI).

Поэтому я пытаюсь отредактировать config.xmlс edit-config следующим образом:

<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.

Что я делаю не так?

Спасибо в совете за ответы.

1 Ответ

0 голосов
/ 13 февраля 2019

Чтобы добавить эти разрешения, вам нужно использовать <config-file>, а не <edit-config>, например:

    <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+ - вам нужно запросить разрешение времени выполнения для опасного разрешения .

В Cordova вы можете сделать это, используя cordova-Diagnostic-Plugin с requestRuntimePermissions(), например:

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
]);
...