sirve setdataandtype que para intent boot_completed activity action_send android android-intent intentfilter

setdataandtype - Iniciar aplicación personalizada de Android desde el navegador de Android



intent filter para que sirve (15)

¿Alguien puede guiarme sobre cómo lanzar mi aplicación para Android desde el navegador de Android?


Debe agregar un pseudo-nombre de host a CALLBACK_URL ''app: //'' no tiene sentido como URL y no se puede analizar.


El enfoque de Felix para manejar enlaces profundos es el enfoque típico para manejar enlaces profundos. También sugeriría revisar esta biblioteca para manejar el enrutamiento y el análisis de sus enlaces profundos:

https://github.com/airbnb/DeepLinkDispatch

Puede usar anotaciones para registrar su Actividad para un URI de enlace profundo en particular, y extraerá los parámetros por usted sin tener que hacer el rigmarole habitual para obtener los segmentos de ruta, emparejarlos, etc. Puede simplemente anotar y realizar una actividad como esta. :

@DeepLink("somePath/{someParameter1}/{someParameter2}") public class MainActivity extends Activity { ... }


El siguiente enlace proporciona información sobre cómo iniciar 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 descargarla sin problemas.

https://developer.chrome.com/multidevice/android/intents


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>


Hey tengo la solución No configuré la categoría como "Predeterminada". 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. :)


Mira @JRuns responde here . La idea es crear html con su esquema personalizado y subirlo a algún lugar. Luego, si hace clic en su enlace personalizado en su archivo html, será redirigido a su aplicación. He utilizado this artículo para Android. Pero no olvide establecer el nombre completo Name = "MyApp.Mobile.Droid.MainActivity" atributo Name = "MyApp.Mobile.Droid.MainActivity" para su actividad de destino.


Por ejemplo, tienes las siguientes cosas:

Un enlace para abrir su aplicación: http://example.com

El nombre del paquete de su aplicación: com.example.mypackage

Entonces tienes que hacer lo siguiente:

1) Agregue un filtro de intención a su actividad (puede ser cualquier actividad que desee. Para obtener más información, consulte la 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) Cree un archivo HTML para probar el enlace o utilice estos métodos.

<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) Usa Mobile Chrome para probar

4) Eso es todo.

Y no es necesario publicar una aplicación en el mercado para probar la vinculación profunda =)

Además, para más información, consultar documentation y presentation útil.



Puerto Xamarin de la respuesta de Félix .

En su MainActivity , agregue esto ( docs: Android.App.IntentFilterAttribute Class ):

.... [IntentFilter(new[] { Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, DataScheme = "my.special.scheme") ] public class MainActivity : Activity { ....

Xamarin agregará lo siguiente en el AndroidManifest.xml para ti:

<activity android:label="Something" android:screenOrientation="portrait" android:theme="@style/MyTheme" android:name="blahblahblah.MainActivity"> <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="my.special.scheme" /> </intent-filter> </activity>

Y para obtener params ( probé en OnCreate de MainActivity ):

var data = Intent.Data; if (data != null) { var scheme = data.Scheme; var host = data.Host; var args = data.PathSegments; if (args.Count > 0) { var first = args[0]; var second = args[1]; ... } }

Por lo que sé, lo anterior se puede agregar en cualquier actividad, no solo MainActivity



También se debe agregar <category android:name="android.intent.category.BROWSABLE"/> al filtro de intención para que la actividad se reconozca correctamente desde el enlace.


Tenga en cuenta si su icono desaparece de Android Launcher cuando implemente esta función, debe dividir el filtro de intención.

<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>


Todas las respuestas anteriores no funcionaron para mí con CHROME partir del 28 de enero de 2014

mi aplicación se lanzó correctamente desde http://example.com/someresource/ enlaces desde aplicaciones como hangouts, gmail, etc. pero no desde el navegador Chrome.

para resolver esto, para que se inicie correctamente desde CHROME, debe establecer un filtro de intento como este

<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>

note el elemento pathPrefix

su aplicación ahora aparecerá dentro del selector de actividad cuando el usuario solicite http://example.com/someresource/ pattern desde el navegador Chrome haciendo clic en un enlace de los resultados de búsqueda de Google o en cualquier otro sitio web


example.php:

<?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 }


Utilice un <intent-filter> con un elemento <data> . Por ejemplo, para manejar todos los enlaces a twitter.com, pondrías esto dentro de tu <activity> en tu AndroidManifest.xml :

<intent-filter> <data android:scheme="http" android:host="twitter.com"/> <action android:name="android.intent.action.VIEW" /> </intent-filter>

Luego, cuando el usuario haga clic en un enlace a Twitter en el navegador, se le preguntará qué aplicación usar para completar la acción: el navegador o su aplicación.

Por supuesto, si desea proporcionar una integración estrecha 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 tu aplicación web puedes poner enlaces como:

<a href="my.special.scheme://other/parameters/here">

Y cuando el usuario haga clic en él, su aplicación se iniciará automáticamente (porque probablemente será la única que puede manejar my.special.scheme:// tipo de uris). 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 comprobarlo.

Editar: para responder a su pregunta, puede usar getIntent().getData() que devuelve un objeto Uri . Luego puede usar los métodos Uri.* Para extraer los datos que necesita. Por ejemplo, digamos que el usuario hizo clic en un enlace a 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"

Puede hacer lo anterior en cualquier parte de su Activity , pero probablemente quiera hacerlo en onCreate() . También puede usar params.size() para obtener el número de segmentos de ruta en el Uri . Busque en javadoc o en el sitio web para desarrolladores de Android otros métodos Uri que puede usar para extraer partes específicas.