¿Alguien puede por favor guiarme con respecto a cómo lanzar mi aplicación de Android desde el navegador de Android?Lanzar aplicación personalizada de Android desde el navegador Android
Respuesta
Usa un <intent-filter>
con un elemento <data>
. Por ejemplo, para manejar todos los enlaces a twitter.com, que había puesto esta dentro de su <activity>
en su AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Entonces, cuando el usuario hace clic en un enlace a Twitter en el navegador, se les pedirá qué aplicación usar para completar la acción: el navegador o su aplicación.
Por supuesto, si se desea proporcionar una estrecha integración entre su sitio web y su aplicación, puede definir su propio esquema:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Luego, en su aplicación web se puede poner enlaces como:
<a href="my.special.scheme://other/parameters/here">
Y cuando el usuario hace clic en él, su aplicación se iniciará automáticamente (porque es probable que sea el único que pueda manejar el tipo de uris my.special.scheme://
). El único inconveniente de esto es que si el usuario no tiene la aplicación instalada, obtendrá un error desagradable. Y no estoy seguro de que haya alguna manera de verificarlo.
Editar: Para responder a su pregunta, puede utilizar getIntent().getData()
que devuelve un objeto Uri
. A continuación, puede utilizar los métodos Uri.*
para extraer los datos que necesita. Por ejemplo, digamos que el usuario ha hecho clic en un enlace para http://twitter.com/status/1234
:
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
Usted puede hacer lo anterior en cualquier lugar en su Activity
, pero lo que probablemente va a querer hacerlo en onCreate()
. También puede usar params.size()
para obtener el número de segmentos de ruta en el Uri
. Consulte javadoc o el sitio web del desarrollador de Android para conocer otros métodos Uri
que puede usar para extraer partes específicas.
Hola, tengo la solución. No configuré la categoría como "Predeterminado". También estaba usando la actividad principal para los datos de intención. Ahora estoy usando una actividad diferente para los datos de intención. Gracias por la ayuda. :)
Suena poco probable (aunque reconozco que esta es una vieja pregunta y tal vez las cosas han cambiado.) De http://developer.android.com/guid e/components/intents-filters.html # ifs "Para intentar pasar la prueba de categoría, cada categoría del objeto Intent * debe coincidir con una categoría del * filtro *. El filtro puede enumerar categorías adicionales, pero no puede omitir ninguna que esté en el intento. " –
Debe agregar un pseudo-nombre de host a CALLBACK_URL 'aplicación: //' no tiene sentido como una URL y no se puede analizar.
También debe haber <category android:name="android.intent.category.BROWSABLE"/>
agregado al filtro de intención para que la actividad se reconozca correctamente desde el enlace.
Como referencia, agregar CATEGORY_BROWSABLE significa que" La actividad de destino puede ser invocada de manera segura por el navegador para mostrar los datos a los que hace referencia un enlace, por ejemplo, un imagen o un mensaje de correo electrónico. " – greg7gkb
¿Es esta una categoría existente o está proponiendo una nueva? – Anish
Existe. Aparentemente debe tener un host de sitio web por separado en diferentes etiquetas de filtro de intención, o causa problemas. – NoBugs
Por favor, vea mi comentario aquí: Make a link in the Android browser start up my app?
Nos oponemos enérgicamente a la gente use sus propios esquemas, a menos que se están definiendo un nuevo esquema de Internet en todo el mundo.
Hackbod es uno de los ingenieros de Google detrás de la plataforma Android. Probablemente sea una buena idea seguir este consejo. De hecho, parece que el esquema de soporte personalizado como este se rompió en Honeycomb. – nmr
Creo que debe crear su propio esquema si desea que la URL también funcione en iPhone (por ejemplo, desde un código QR). –
No me hago responsable de las limitaciones impuestas a los desarrolladores por iOS. ;) – hackbod
En mi caso tuve que establecer dos categorías para el <intent-filter>
y luego funcionó:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
Lo mismo aquí, necesario para agregar la categoría adicional. – KPK
¿Alguien puede explicar cuál es el proceso real de hacer esto? Cualquier enlace a la implementación exacta, los requisitos previos serán útiles. Gracias –
Probado en la configuración del desarrollador. En realidad, estaba dando un nombre de dominio incorrecto. Mi error. –
El siguiente enlace proporciona información sobre el lanzamiento de la aplicación (si está instalada) directamente desde el navegador.De lo contrario, abre directamente la aplicación en Play Store para que el usuario pueda descargar sin problemas.
Todas las respuestas anteriores no funcionaron para mí con CHROME
al 28 Ene 2014
mi aplicación ejecutados correctamente desde http://example.com/someresource/ enlaces de aplicaciones como Hangouts, Gmail, etc, pero no desde el navegador Chrome.
para resolver esto, por lo que se pone en marcha correctamente desde Chrome tiene que configurar el filtro intención como esta nota
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
<data
android:host="www.example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
</intent-filter>
el elemento pathPrefix
su aplicación va a aparecer dentro de la actividad selector cuando el usuario solicita http://example.com/someresource/ patrón del navegador Chrome haciendo clic en un enlace de los resultados de búsqueda de Google o cualquier otro sitio web
Esto me ayudó mucho. ¡Muchas gracias! Por favor, publique su respuesta aquí para que pueda otorgarle la recompensa! http://stackoverflow.com/questions/21663001/launching-custom-android-application-from-android-browser-chrome –
@VladSchnakovszki thx, there u go :) – AndroidGecko
¿Qué idioma es este? – Dims
Sí, Chrome busca en lugar de buscar el esquema. Si desea iniciar su aplicación a través del esquema de URI, use esta aplicación de utilidad genial en Play Store. Me salvó el día :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
Tenga en cuenta que si su ícono desaparece de android launcher cuando implementa esta característica, entonces debe dividir intent-filter.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="your-own-uri" />
</intent-filter>
</activity>
¿Cómo hacer que esto funcione para Android lollipop? – Salmaan
Acabas de salvarme la vida, señor @szines. Gracias. – user1801879
Esto no parece funcionar en lollipop – portfoliobuilder
ejemplo.php: enfoque
<?php
if(!isset($_GET['app_link'])){ ?>
<iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
<iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
<?php
}
else { ?>
<script type="text/javascript">
self.window.location = '<?php echo $_GET['app_link'];?>';
window.parent.location.href = '<?php echo $_GET['full_link'];?>';
</script>
<?php
}
¿Puede explicar lo que se supone que debe hacer este código? –
Esto crea dos iframes invisibles: enlace profundo y enlace normal. Si la aplicación está instalada, el iframe de enlace profundo la lanzará. Si no, se muestra el enlace normal. Con un poco de trabajo adicional, se podría implementar el enlace profundo diferido donde se invoca el enlace profundo después de que se instala la aplicación. –
de Felix para el manejo de enlaces profundos es el típico enfoque de manejo de enlaces profundos. También me sugiero revisar esta biblioteca para manejar el enrutamiento y el análisis de sus enlaces profundos:
https://github.com/airbnb/DeepLinkDispatch
Puede utilizar las anotaciones para registrar su actividad por un profundo vínculo específico URI, y se va a extraer los parámetros para usted sin tener que hacer el galimatías usual de conseguir los segmentos de trazado, se pongan en venta, etc usted puede simplemente anotar y actividad como esta:
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
Esta es la mejor manera de hacerlo. – muntasir2000
por ejemplo, usted tiene las cosas siguientes:
un vínculo para abrir su aplicación: http://example.com
El nombre del paquete de la aplicación: com.example.mypackage
Luego hay que hacer a continuación:
1) añadir un filtro de intención a su actividad (puede ser cualquier actividad que desee). Para obtener más información, consulte el documentation).
<activity
android:name=".MainActivity">
<intent-filter android:label="@string/filter_title_view_app_from_web">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://example.com" -->
<data
android:host="example.com"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2) Crear un archivo HTML para probar el enlace o utilizar this methods.
<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>
<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>
3) Uso móvil Chrome para probar
4) Eso es todo.
Y no es necesario publicar aplicaciones en el mercado para probar los enlaces profundos =)
Además, para más información, consulte documentation y útil presentation.
Tuve que crear un archivo html y subirlo para que funcione. Me pregunto por qué, especialmente el segundo, no funciona directamente desde un navegador (Chrome). – Makalele
- 1. Android: lanzar una preferencia personalizada desde una actividad de preferencia
- 2. Abra el navegador nativo desde una aplicación de Android
- 3. Actualización de la aplicación de Android personalizada
- 4. Desencadenar Google Maps desde el navegador de Android
- 5. Cómo llamar a una aplicación Android desde otra aplicación Android
- 6. Android abre el navegador desde el servicio evitando varias pestañas
- 7. Android: inicie Firefox desde la aplicación
- 8. Abrir el navegador a la página web Aplicación de Android
- 9. Fuente personalizada en Android
- 10. Android vista personalizada Constructor
- 11. SVG en el navegador Android
- 12. Android NDK: compilación WebView personalizada desde la fuente
- 13. ¿La aplicación GWT funciona bien en el navegador Android?
- 14. ¿Cómo lanzar aplicaciones de Android dentro de mi aplicación en Android?
- 15. Android: Disposición de Spinner personalizada
- 16. Identificar GoogleTv desde la aplicación de Android
- 17. Android: AlertDialog personalizada
- 18. Abrir una URL usando el navegador nativo PlayBook desde una aplicación basada en Android
- 19. Detectar desde el navegador si hay una aplicación específica instalada en Android
- 20. Animación personalizada en Android
- 21. crear cuenta personalizada android
- 22. Cámara personalizada Android
- 23. ¿Cómo twittear desde la aplicación de Android?
- 24. Android - Temas de la aplicación personalizada que están disponibles gratuitamente
- 25. Clase de aplicación personalizada para niños en Mono para Android
- 26. Imagen de casilla personalizada android
- 27. ¿Cómo puedo crear una aplicación de reemplazo personalizada para Android?
- 28. ¿Puedo incrustar una fuente personalizada en una aplicación de Android?
- 29. Invocar Adobe Reader desde mi aplicación Android
- 30. Android Enlace a Market desde otra aplicación
Gracias por su pronta respuesta. Pero, ¿pueden decirme cómo acceder a los parámetros después de "my.special.scheme: //"? –
He editado mi respuesta para incluir instrucciones sobre cómo extraer los datos del Uri. Marque esta respuesta como aceptada (solo) si lo considera así haciendo clic en la marca de verificación junto a ella. – Felix
Muy impresionante muy útil. – Anton