Enviar url a la aplicación androide iónica a través de webintents desde otra aplicación
Buscando una solución actualizada, ejecutando la última versión iónica 1.1.0 que usa Cordova 5.x. Tratando de ser capaz de navegar por un sitio web en cromo y enviar esa url a mi aplicación iónica android utilizando la intención web. Mi aplicación compila y se ejecuta, sin embargo, cuando intento utilizar el recurso compartido de cromo (o cualquier otra aplicación) y elegir mi aplicación para compartir, mi aplicación se bloquea.
Primero intenté usar el complemento:
- El comando zip zip no se ha encontrado
- Icono iónico de Android no es el mismo tamaño / proporción original
- Error: ANDROID_HOME no está establecido y el comando "android" no está en tu PATH. Debe cumplir al menos una de estas condiciones
- Ionic2 mínimo iOS y versiones de Android
- Uncaught ReferenceError: ionic no está definido
Plugin iónico añadir https://github.com/Initsogar/cordova-webintent
Y luego eliminado el complemento y también he intentado un tenedor más recientemente actualizado:
Plugin iónico agregar https://github.com/fluentstream/cordova-webintent
En mi archivo app.js me pongo el siguiente código:
.run(function($ionicPlatform, $rootScope, $ionicHistory, $state) { $ionicPlatform.ready(function() { window.plugins.webintent.getExtra(window.plugins.webintent.EXTRA_TEXT, function(url) { incomingURL = url; //alert(incomingURL); console.log(incomingURL); }, function() { incomingURL = false; //alert("no url"); console.log("no url"); }); }); })
También intenté:
.run(function($ionicPlatform, $rootScope, $ionicHistory, $state) { $ionicPlatform.ready(function() { window.plugins.webintent.getUri(function(url) { if(url !== "") { alert(url);//url is the url the intent was launched with } }); }); })
En el archivo config.xml pondría:
<plugin name="WebIntent" value="com.borismus.webintent.WebIntent"/>
En el AndroidManifest.xml que pondría manualmente en:
<activity android:name="ShareActivity"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
La aplicación se ejecuta, pero cuando vaya a cromo y haga clic en el botón de compartir y, a continuación, elija mi aplicación, la aplicación se cierra el siguiente mensaje android aparece:
Desafortunadamente, MyAppName se ha detenido.
¿Alguien puede sugerir una solución para obtener la parte de la intención de trabajar con mi aplicación … o estoy olvidando algo y hacer algo mal.
¡Gracias!
- Ionic: emulador: ERROR: La configuración de este AVD falta un archivo del kernel !! Emulador: ERROR: ANDROID_SDK_ROOT no está definido
- ¿Hay una manera que puedo insertar un escáner de código de barras en una aplicación Ionic 2?
- Trabajadores de servicio en la aplicación cordova
- Angular y ionicPush no funciona en android
- Utilizar variables de entorno / parametrizar config.xml
- Obtener el valor del botón de radio cuando se hace clic en el botón no funciona angularjs
- Ionic construir Android no funciona en el paquete de recursos
- Cordova Error usando Cordova-Android 6.2.0 - getFileResources no es una función
Descubrí que el problema se debía a cómo configuré mi archivo AndroidManifest.xml.
Yo estaba usando una etiqueta de actividad extra, cuando debería haber incluido la intención en la actividad 1.
Por ejemplo yo tenía:
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize"> <intent-filter android:label="@string/launcher_name"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="ShareActivity"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
Cuando debería haber tenido:
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize"> <intent-filter android:label="@string/launcher_name"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
Esta pregunta es un poco envejecida. Pero tuve un desafío más o menos similar. No tuve suerte con el plugin de WebIntent y por lo tanto desarrollé mi propio plugin para tratar con Intents en Android.
Puede consultar esto: https://github.com/napolitano/cordova-plugin-intent
Mientras que todavía estoy trabajando en este plugin para mis propios proyectos, es todavía casi usable y la documentación debe ser lo suficientemente bueno para conseguir un pie en la puerta.
Algunos antecedentes:
Para permitir que aplicaciones de terceros envíen contenido a tu aplicación, debes agregar un filtro de intenciones a tu MainActivity en AndroidManifest.xml.
<intent-filter> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" /> </intent-filter>
Mientras que usted puede hacer esto manualmente, esto tiene algunas desventajas – así que usted desea probablemente tener un gancho o algo similar. Si usted va al repositorio arriba, usted encontrará y ejemplo para esto.
Además del filtro de intenciones, actualmente necesitas un complemento que te permita acceder a la intención de cordova (que es importante para acceder al contenido enviado al inicio de la aplicación) y recibir notificaciones si se desencadena el evento onNewIntent
, lo que sucede si El contenido se envía mientras la aplicación se está ejecutando.
Eso es exaclty lo que hace mi plugin. Te da acceso a la intención cordova y te permite manejar el evento onNewIntent
.
Ejemplos:
window.plugins.intent.getCordovaIntent(function (Intent) { console.log(Intent); }, function () { console.log('Error'); }); window.plugins.intent.setNewIntentHandler(function (Intent) { console.log(Intent); });
Recibirá un objeto de intención limitada como resultado de éxito. Esto puede ser procesado por su aplicación.
Ejemplo:
{ "action": "android.intent.action.SEND_MULTIPLE", "clipItems": [ { "uri": "file:///storage/emulated/0/Download/example-document.pdf" }, { "uri": "file:///storage/emulated/0/Download/example-archive.zip" } ], "flags": 390070273, "type": "*/*", "component": "ComponentInfo{com.example.droid/com.example.droid.MainActivity}", "extras": "Bundle[mParcelledData.dataSize=596]" }
Si bien este ejemplo muestra realmente JSON, recibirá un objeto listo para usar.
Tenga en cuenta que desarrollar el complemento actualmente sólo para mis propias necesidades. Sin embargo, puede funcionar también para usted. Actualmente no se agregaron ejemplos angulares al README, pero creo que no debería ser un gran problema.