2011-12-28 7 views
5

Provare a creare un'app di avviamento con PhoneGap. Sono bloccato su questa linea:Errore PhoneGap - "Impossibile leggere la proprietà 'acquisizione' di undefined" su Android

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

Funziona bene su iOS, ma getta questo errore su emulatore Android:

Impossibile leggere proprietà 'cattura' di indefinito

Ecco l'oggetto navigator, al momento dell'errore (avviso non c'è la proprietà device che causa questo errore)

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

Ed ecco l'oggetto PhoneGap subito dopo Phonegap.js ha caricato (si noti che dice 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": {} 
} 

Delle idee come superare questo?

+0

Potrebbe puntare alla pagina del [API PhoneGap] (http://docs.phonegap.com/en/1.3.0/index.html), dove descrive l'oggetto 'navigator.device' e come PhoneGap lo sta aumentando ...? –

+0

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

+0

Se la funzionalità di acquisizione audio è disponibile sul simulatore? Prova sul dispositivo e vedi se ottieni lo stesso risultato – sciritai

risposta

2

Ok, questa è la soluzione più douchy ho mai incappato in!

Il JS per Android è diverso di quello per iOS. I file hanno lo stesso nome - phonegap-x.x.x.js. Nessun punto per indovinare sarebbe diverso per ogni altra piattaforma mobile.

Capisco che è necessario disporre di JS diversi per piattaforma diversa, ma che ne dici di menzionarlo da qualche parte?

Una volta trascinato il JS dalla cartella Android, tutto è andato a posto.

Grazie a questa domanda per la risposta: deviceready won't fire in Phonegap 1.0.0 on Android

+0

Ho appena sprecato 30 minuti della mia vita, poi ho trovato questo post. Che sciocco :) Grazie! –

0

Il nome file phonegap.js nella directory www corrisponde al riferimento index.html? Una volta a cambiare le phonegap.js per PhoneGap-1.3.0.js, l'esempio completo da the API docs corre sul mio HTC Evo

+0

Sì, sì. Inoltre, funziona su iOS (nessuna modifica al codice tra la versione iOS e Android). – Mrchief

+0

Forse dovresti pubblicare un singolo file html che mostri il problema –

+0

Puoi fare il loro esempio di ciao mondo, copiare questa linea sul pulsante clic e vedrai il problema. – Mrchief