Ошибка Phonegap — не удается прочитать свойство «захват» неопределенного на Android

Попытка создать стартовое приложение с PhoneGap. Я застрял на этой строке:

navigator.device.capture.captureAudio(onSuccess, onError, {limits:1, duration:5});

Он отлично работает на iOS, но выдает эту ошибку на эмуляторе Android:

Не удается прочитать свойство «захват» неопределенного

Вот объект navigator во время ошибки (обратите внимание, что нет свойства device, которое вызывает эту ошибку)

{
    "language": "en-US",
    "product": "Gecko",
    "mimeTypes": {
        "length": 0
    },
    "appVersion": "5.0 (Linux; U; Android 4.0.3; en-us; sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
    "plugins": {
        "length": 0
    },
    "onLine": true,
    "connection": {
        "type": 0
    },
    "platform": "Linux armv7l",
    "vendor": "Google Inc.",
    "appCodeName": "Mozilla",
    "geolocation": {},
    "cookieEnabled": true,
    "appName": "Netscape",
    "productSub": "20030107",
    "userAgent": "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
    "vendorSub": ""
}

А вот объект PhoneGap сразу после загрузки Phonegap.js (обратите внимание, он говорит device: true)

{
    "commandQueue": [],
    "commandQueueFlushing": false,
    "_constructors": [
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        null
    ],
    "documentEventHandler": {},
    "windowEventHandler": {},
    "resources": {
        "base": true,
        "debugconsole": true,
        "position": true,
        "acceleration": true,
        "accelerometer": true,
        "battery": true,
        "camera": true,
        "device": true,
        "capture": true,
        "contact": true,
        "file": true,
        "filetransfer": true,
        "geolocation": true,
        "compass": true,
        "media": true,
        "notification": true,
        "orientation": true,
        "sms": true,
        "telephony": true,
        "network": true,
        "splashscreen": true
    },
    "available": false,
    "sessionKey": 0,
    "callbackId": 0,
    "callbacks": {},
    "callbackStatus": {
        "NO_RESULT": 0,
        "OK": 1,
        "CLASS_NOT_FOUND_EXCEPTION": 2,
        "ILLEGAL_ACCESS_EXCEPTION": 3,
        "INSTANTIATION_EXCEPTION": 4,
        "MALFORMED_URL_EXCEPTION": 5,
        "IO_EXCEPTION": 6,
        "INVALID_ACTION": 7,
        "JSON_EXCEPTION": 8,
        "ERROR": 9
    },
    "mediaObjects": {}
}

Любые идеи, как обойти это?


person Mrchief    schedule 28.12.2011    source источник
comment
Не могли бы вы указать страницу в API PhoneGap, где описывается navigator.device и как PhoneGap дополняет его... ?   -  person Šime Vidas    schedule 28.12.2011
comment
Это здесь   -  person Mrchief    schedule 28.12.2011
comment
Должна ли функция захвата звука быть доступна на симуляторе? Протестируйте на устройстве и посмотрите, получите ли вы тот же результат   -  person sciritai    schedule 29.12.2011
comment
Нет документа, который говорит об обратном. В эмуляторе есть приложение для записи речи, которое работает, так что я думаю, кроме недостатка в PhoneGap, технически ничто не препятствует этому.   -  person Mrchief    schedule 29.12.2011


Ответы (2)


Хорошо, это самое тупое решение, на которое я когда-либо натыкался!

JS для Android отличается от JS для iOS. Файлы называются одинаково - phonegap-x.x.x.js. Нет оснований предполагать, что это будет отличаться для любой другой мобильной платформы.

Я понимаю, что вам нужно иметь разные JS для разных платформ, но как насчет того, чтобы упомянуть об этом где-нибудь?

Как только я перетащил JS из папки Android, все встало на свои места.

Благодаря этому вопросу для ответа: PhoneGap 1.0.0 на Android

person Mrchief    schedule 04.01.2012
comment
Я потратил впустую 30 минут своей жизни, а потом нашел этот пост. Как глупо :) Спасибо! - person Tegan Snyder; 11.01.2012

Соответствует ли имя файла phonegap.js в вашем каталоге www ссылке index.html? Как только я изменю phonegap.js на phonegap-1.3.0.js, полный пример из документация по API работает на моем HTC evo

person Paul Beusterien    schedule 28.12.2011
comment
Да. Кроме того, он работает на iOS (код не меняется между версиями iOS и Android). - person Mrchief; 28.12.2011
comment
Возможно, вам следует опубликовать один HTML-файл, демонстрирующий проблему. - person Paul Beusterien; 29.12.2011
comment
Вы можете взять их пример «Hello World», скопировать эту строку, чтобы она срабатывала при нажатии кнопки, и вы увидите проблему. - person Mrchief; 29.12.2011