Cómo tomar una captura de pantalla en la aplicación cordova / phonegap

Estoy intentando tomar una captura de pantalla en mi aplicación cordova utilizando este complemento, pero se está produciendo un error. Realmente no sé cuál es el error, ya que lo estoy probando en mi smartphone Android y la aplicación sólo bloquea. En el navegador, lo mismo sucede con este error: TypeError: Cannot read property 'save' of undefined , donde 'save' proviene de este código:

 navigator.screenshot.save(function(error,res){ if(error){ console.error(error); }else{ console.log('ok',res.filePath); } }); 

PS: También intentado navigator.plugin.screenshot... , navigator.plugins.screenshot , window.screenshot , window.plugin.screenshot y window.plugins.screenshot

PS2: Comprobé si el plugin está instalado con cordova plugins en cordova CLI y todo está bien, plugin existe en la carpeta de plugins y es para cordova versión> = 3.0.0 y el mío es más nuevo

Pero, por supuesto, el navegador no está realmente cargando el complemento, porque este error también se produce allí: Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:23273/www/cordova_plugins.json No se captura ninguna captura de pantalla en mi smartphone.

Estoy usando la luz de trabajo y estaba pasando por el mismo problema. Mi solución fue cambiar el código del archivo Screenshot.js a:

 var formats = ['png','jpg']; function Screenshot() { } Screenshot.prototype.save = function (callback,format,quality, filename) { format = (format || 'png').toLowerCase(); filename = filename || 'screenshot_'+Math.round((+(new Date()) + Math.random())); if(formats.indexOf(format) === -1){ return callback && callback(new Error('invalid format '+format)); } quality = typeof(quality) !== 'number'?100:quality; cordova.exec(function(res){ callback && callback(null,res); }, function(error){ callback && callback(error); }, "Screenshot", "saveScreenshot", [format, quality, filename]); }; Screenshot.install = function () { if (!window.plugins) { window.plugins = {}; } window.plugins.screenshot = new Screenshot(); return window.plugins.screenshot; }; cordova.addConstructor(Screenshot.install); 

De esta manera puedo hacer la llamada con el siguiente código:

 window.plugins.screenshot.save(function(error,res){ if(error){ alert(error); }else{ alert('ok',res.filePath); //should be path/to/myScreenshot.jpg } },'jpg',50,'myScreenShot'); 

Esto funcionó perfectamente en mi teléfono inteligente Android.

También he añadido en el archivo res / xml / config.xml:

 <feature name="Screenshot"> <param name="android-package" value="org.apache.cordova.screenshot.Screenshot"/> </feature> 

En el archivo AndroidManifest.xml:

 <uses-permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" /> 

Y agregó la clase java en el siguiente paquete: org.apache.cordova.screenshot.Screenshot

Todas estas configuraciones tienen la información en el archivo plugin.xml del plugin

¿carga su proyecto en localhost? ¿por qué tiene este tipo de archivo:

http://localhost:23273/www/cordova_plugins.json. ?

usted está tratando de simular el proyecto cordova con "cordova service 23273"? no puedes usar ningún plugin con "cordova serve".

usted debe tener file: /// como protocolo …

Gracias a todos, por desgracia no puedo dar una respuesta real a esta pregunta, ya que hice muchas cosas. El último fue actualizar mi archivo cordova.js a la última versión, que realmente solucionó mi problema, pero cada comentario y respuesta ayudó mucho.

Quiero agradecer tanto a @Talysson de Castro como @Darktalker por ayudarme! 🙂

  • Activa Google Maps desde el navegador de Android
  • La exportación de js de la lona permite no trabajar en dispositivo androide
  • ¿Cómo mostrar fórmulas matemáticas en mi aplicación Android?
  • ¿Qué dispositivos admiten la lectura de velocidad de geolocalización en sus navegadores?
  • Android - Cómo puedo llamar a la función javascript y obtener el valor retur de la función javascript
  • Ninguno de los métodos en la interfaz añadida se han anotado con @ android.webkit.JavascriptInterface; No serán visibles en API 17
  • ¿Cómo acceder a `this` dentro de un renderRow de un ListView?
  • Cómo detectar sólo el navegador nativo de Android
  • Firebug como depurar en Android
  • Página Web que bloquea los navegadores Android
  • Android WebView reproducir audio con javascript
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.