2011-12-28 9 views
5

Próbuję utworzyć aplikację startową z PhoneGap. Utknąłem na tej linii:Błąd Phonegap - "Nie można odczytać właściwości" przechwytywania "z undefined" na Androidzie

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

Działa prawidłowo na iOS, ale generuje ten błąd na Android emulatora:

nie można odczytać właściwość 'Capture' undefined

Oto navigator obiekt, w momencie wystąpienia błędu (zawiadomienie nie ma device nieruchomość, która jest przyczyną tego błędu)

{ 
    "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": "" 
} 

A oto przedmiot PhoneGap tuż po Phonegap.js załadował (zauważ mówi 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": {} 
} 

Wszelkie pomysły jak to ominąć?

+0

mógłby wskazywać na stronę w [PhoneGap API] (http://docs.phonegap.com/en/1.3.0/index.html) gdzie opisuje obiekt 'navigator.device' i jak rozszerza go PhoneGap ...? –

+0

To [tutaj] (http://docs.phonegap.com/en/1.3.0/phonegap_media_capture_capture.md.html#capture.captureAudio) – Mrchief

+0

Jeżeli funkcja przechwytywania dźwięku dostępne na symulatorze? Przetestuj na urządzeniu i sprawdź, czy uzyskasz ten sam wynik. – sciritai

Odpowiedz

2

Ok, to jest najbardziej douches rozwiązanie, na jakie natknąłem się!

JS na Androida to inny niż niż na iOS. Pliki mają taką samą nazwę - phonegap-x.x.x.js. Nie ma punktów za zgadywanie, że byłoby inaczej w przypadku każdej innej platformy mobilnej.

Rozumiem, że trzeba mieć różne JS na innej platformie, ale jak o wspomnieć, że gdzieś?

Raz przeciągnięty JS z katalogu Android, wszystko zaczęło się układać.

Dzięki tej kwestii za odpowiedź: deviceready won't fire in Phonegap 1.0.0 on Android

+0

Właśnie zmarnowałem 30 minut mojego życia, a potem znalazłem ten post. Jak głupio :) Dzięki! –

0

Czy nazwa pliku phonegap.js w katalogu www odpowiada odwołaniu index.html? Po zmianie pliku phonegap.js na phonegap-1.3.0.js, pełny przykład z the API docs działa na moim HTC evo

+0

Tak, to prawda. Działa również na iOS (bez zmian kodu między wersją iOS i Android). – Mrchief

+0

Być może powinieneś opublikować pojedynczy plik html, który demonstruje problem. –

+0

Możesz wziąć przykład z Hello World, skopiuj tę linię, aby strzelać po kliknięciu przycisku, a zobaczysz problem. – Mrchief

Powiązane problemy