Использование Meteor с cordova.plugins.diagnostic не работает - PullRequest
0 голосов
/ 31 августа 2018

Я использую METEOR@1.4.2.3 со следующими плагинами:

cordova:cordova-plugin-backbutton       0.3.0
cordova:cordova-plugin-camera           2.1.1
cordova:cordova-plugin-device           1.1.4
cordova:cordova-plugin-sim              1.3.2
cordova:cordova.plugins.diagnostic      2.3.16
cordova:phonegap-plugin-barcodescanner  3.0.0

Я пытаюсь реализовать новую правильную структуру для Android API уровня 26 (от API уровня 22 до 26), и она не работает.

Код

function onDeviceReady() {
console.log(device.cordova);

  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.CAMERA,
    cordova.plugins.diagnostic.permission.WRITE_EXTERNAL_STORAGE,
    cordova.plugins.diagnostic.permission.READ_EXTERNAL_STORAGE,
    cordova.plugins.diagnostic.permission.READ_PHONE_STATE
  ]);

}

Я всегда получаю эту ошибку, и приложение заморожено:

I20180831-10: 52: 52,483 (2)? 08-31 10: 52: 44.612 29275 29275 I хром: [INFO: CONSOLE (5283)] "Uncaught TypeError: Невозможно прочитать свойство 'CAMERA' undefined", источник: http://localhost:12136/app/app.js?hash=4b27536f027d34508de1ae9fccb904c97e426df1 (5283)

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

я исправил проблему.

Я добавляю плагин

cordova:cordova-plugin-android-permissions  1.0.0

к проекту.

Модифицированная функция OnDeviceReady:

 function onDeviceReady() {
    console.log(device.cordova);

    var permissions = cordova.plugins.permissions;

   permissions.checkPermission(permissions.READ_PHONE_STATE, function( status ){
      if ( status.hasPermission ) {
        console.log("Yes (READ_PHONE_STATE) ");
      }
      else {
        console.warn("No (READ_PHONE_STATE) ");
        permissions.requestPermission(permissions.READ_PHONE_STATE, success, error('READ_PHONE_STATE'));
      }
    });

    permissions.checkPermission(permissions.CAMERA, function( status ){
      if ( status.hasPermission ) {
        console.log("Yes (CAMERA) ");
      }
      else {
        console.warn("No (CAMERA) ");
        permissions.requestPermission(permissions.CAMERA, success, error("CAMERA"));
      }
    });

    permissions.checkPermission(permissions.WRITE_EXTERNAL_STORAGE, function( status ){
      if ( status.hasPermission ) {
        console.log("Yes (WRITE_EXTERNAL_STORAGE) ");
      }
      else {
        console.warn("No (WRITE_EXTERNAL_STORAGE) ");   
        permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, 
        success,error("WRITE_EXTERNAL_STORAGE")
          );
      }
    });

    permissions.checkPermission(permissions.READ_EXTERNAL_STORAGE, function( status ){
      if ( status.hasPermission ) {
        console.log("Yes (READ_EXTERNAL_STORAGE) ");
      }
      else {
        console.warn("No (READ_EXTERNAL_STORAGE) ");
        permissions.requestPermission(permissions.READ_EXTERNAL_STORAGE, success, error('READ_EXTERNAL_STORAGE'));
      }
    });

    function error(permission4request) {
        console.warn(permission4request + ' permission is not turned on');
        console.log(permission4request + ' permission is not turned on');
    }
     fdsf

    function success( status ) {
        if( !status.hasPermission ) error();
    }

    loginLogic();
}

Этот код работает с API уровня 26 для запроса разрешений.

0 голосов
/ 31 августа 2018

Добро пожаловать в переполнение стека.

Сообщение об ошибке, подобное этому

Невозможно прочитать свойство 'CAMERA' из неопределенного "

Служит, чтобы сказать вам, чтобы искать в вашем коде, где есть .CAMERA, который является этой строкой:

cordova.plugins.diagnostic.permission.CAMERA,

Это означает, что cordova.plugins.diagnostic.permission не определено. Это означает, что cordova.plugins.diagnostic определен, поэтому вам нужно проверить документацию для этого плагина.

Это скажет вам, где искать, и следующий совет - написать защитный код, чтобы учесть неожиданное. Примерно так:

if (cordova && cordova.plugins && cordova.plugins.diagnostic && cordova.plugins.diagnostic.permission) {
  // Everything is defined, expect cordova.plugins.diagnostic.permission.CAMERA to be valid
} else {
  console.error("Something undefined in cordova.plugins.diagnostic.permission") 
}
...