cordova - que - phonegap b
Comparte algo en una aplicación de teléfono (3)
@ ericpeters0n: al usar las aplicaciones de iPhone y Compartir, ¿de dónde viene esta lista de aplicaciones? Por ejemplo, cuando estoy en la Galería de fotos y comparto, la lista incluye Mensaje, Correo, Twitter, Facebook, Flickr. ¿Cómo se registraron estas aplicaciones para aparecer en esta lista?
¿Hay alguna manera de registrar una aplicación de phonegap para que aparezca en el menú de aplicaciones para compartir?
Me las arreglé para compartir la URL del archivo; utilizando EXTRA_STREAM en lugar de EXTRA_TEXT dentro del dispositivo listo, modificando Webintent.java y agregando un filtro de intención en AndroidMenifest.xml.
Así es como se ve mi actividad principal:
<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 android:label="@string/app_name">
<data android:mimeType="*/*" />
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Descubrí que el complemento tenía un error para la parte EXTRA_STREAM, así que modifiqué mi archivo java de acuerdo con esto:
https://github.com/Initsogar/cordova-webintent/issues/23
También dentro de mi archivo js, tengo que llamar a la función de esta manera: (uso de EXTRA_STREAM en lugar de EXTRA_TEXT)
window.plugins.webintent.getExtra(window.plugins.webintent.EXTRA_STREAM, function (url) {
// url is the value of EXTRA_STREAM
alert(url);
}, function() {
// There was no extra supplied.
alert("no url");
});
y obtengo el URI del archivo.
Para aparecer en esta lista, debe modificar el archivo AndroidManifest.xml y agregar las siguientes líneas a su actividad:
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
Esto hará que tu aplicación aparezca en la lista. Ahora creo que probablemente también quieras saber cómo manejar esto en tu código. Cuando otra aplicación va a compartir algo de texto contigo, comenzará tu aplicación con un "Intento" de Android. Para poder utilizar Intents, necesita un complemento PhoneGap. Creo que WebIntent podría ser adecuado para ti. Este sería el código:
// deviceready is PhoneGap''s init event
document.addEventListener(''deviceready'', function () {
window.plugins.webintent.getExtra(WebIntent.EXTRA/_TEXT, function (url) {
// url is the value of EXTRA_TEXT
}, function() {
// There was no extra supplied.
});
});
Más información en WebIntent aquí: http://smus.com/android-phonegap-plugins/
Nota: no creo que puedas hacer esto con PhoneGap Build ... solo puedes usar complementos compatibles y no puedes cambiar el archivo AndroidManifest.xml en gran medida. Probablemente tengas que elegir la ruta de Cordova y construir todo en tu máquina.
Editar: hay algunas personas que preguntan cómo hacer esto en iOS. Hay dos pasos para hacer esto:
- Asocia tu aplicación con las asociaciones de tipo de archivo correctas agregando la información relevante en tu info.plist. Esta respuesta SO explica cómo hacerlo: ¿Cómo asocio los tipos de archivos con una aplicación de iPhone? . Esto hará que su aplicación aparezca en la lista, pero su aplicación aún no recibirá los datos.
- Su aplicación ahora se lanzará con nuevos parámetros. Ahora debe poder leer estos parámetros. Compruebe esta pregunta / respuesta en SO, hace exactamente eso: Cómo pasar argumentos a la aplicación creada en Phonegap