2011-12-28 30 views
5

Intentando crear una aplicación de inicio con PhoneGap. Estoy atrapado en esta línea:Error de Phonegap - "No se puede leer la propiedad 'captura' de indefinido" en Android

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

Funciona bien en iOS, pero lanza este error en emulador de Android:

No se puede leer la propiedad 'captura' de indefinido

Aquí está el objeto navigator, en el momento del error (observe que no hay una propiedad device que está causando este error)

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

Y aquí está el objeto PhoneGap justo después Phonegap.js ha cargado (nótese que 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": {} 
} 

Alguna idea de cómo superar esto?

+0

Podría apuntar a la página en la [API PhoneGap] (http://docs.phonegap.com/en/1.3.0/index.html), donde describe el objeto 'navigator.device' y cómo PhoneGap lo está aumentando ...? –

+0

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

+0

¿Debería la funcionalidad de captura de audio estar disponible en el simulador? Pruebe en el dispositivo y vea si obtiene el mismo resultado – sciritai

Respuesta

2

Bien, esta es la solución más tonta que he encontrado en mi vida.

El JS para Android es diferente que para iOS. Los archivos tienen el mismo nombre: phonegap-x.x.x.js. No hay puntos para adivinar que sería diferente para cada otra plataforma móvil.

Entiendo que debe tener diferentes JS para una plataforma diferente, pero ¿qué le parece mencionar eso?

Una vez que arrastré el JS desde la carpeta de Android, todo encajó.

Gracias a esta pregunta para la respuesta: deviceready won't fire in Phonegap 1.0.0 on Android

+0

Acabo de perder 30 minutos de mi vida, luego encontré esta publicación. Qué tonto :) ¡Gracias! –

0

¿El nombre de archivo phonegap.js en su directorio www coincide con la referencia index.html? Una vez que cambio el phonegap.js a phonegap-1.3.0.js, el ejemplo completo de the API docs se ejecuta en mi HTC evo

+0

Sí lo hace. Además, funciona en iOS (no hay cambios de código entre la versión de iOS y Android). – Mrchief

+0

Quizás deba publicar un solo archivo html que demuestre el problema –

+0

Puede tomar su ejemplo de hello world, copiar esta línea para disparar al hacer clic en el botón y verá el problema. – Mrchief

Cuestiones relacionadas