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
- Soporte de lienzo HTML5 y vista Web de Android
- Android WebView Javascript getSelection
- Phonegap cordova.js está ausente
- Cambios en una página web a través de JavaScript que no aparecen en WebView. ¿Hay una manera de forzar el WebView para volver a dibujar su contenido?
- Cómo crear mapas que detectan la ubicación automática en React-Native
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.
- ¿Cómo detectar el número de versión de Android en Firefox para Android?
- Pregunta Javascript - ¿qué es "ventana"?
- Dom iterando causando la mitad de renderizado de webview
- Llamadas Javascript desde Android usando PhoneGap
- Finalizar todas las actividades cuando se pulsa el botón Atrás
- Lectura de archivos utilizando Cordova File Plugin
- Android detección de tamaño de pantalla en javascript o css - no conseguir lo que estoy esperando
- Problema al limitar caracteres de entrada a los números en cromo android con javascript / jquery
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! 🙂
- Android Studio: ¿dónde "Install Client Libraries" para Cloud Endpoints?
- Cajón de navegación listview not refreshing listitems