Esquema host no funciona en androide lollipop, haga clic en el enlace para abrir la aplicación

Estoy utilizando este código para iniciar mi aplicación desde un enlace.

<activity android:name="com.example.myApp.myClass" android:label="@string/app_name" > <intent-filter> <data android:host="customHostName" android:scheme="customScheme" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Este es el enlace href, quiero obtener la clave al final.

 customScheme://customHost/49FYTJTF00 

Está funcionando bien en todas las versiones anteriores de android, pero no está funcionando en Lollipop.
Cuando hago clic en el enlace sólo muestra la lista de navegadores para iniciar.

¿Que debería hacer?

5 Solutions collect form web for “Esquema host no funciona en androide lollipop, haga clic en el enlace para abrir la aplicación”

Editar:

Después de probar y probar, descubrí que si su esquema contiene un carácter en mayúscula, el navegador no podrá iniciarlo. Su esquema sólo debe contener caracteres en minúsculas!

También tenga en cuenta que el error 459156 del proyecto de cromo todavía no le permite lanzar url directamente, debe hacer referencia a los usuarios a una página web que contiene este código JavaScript:

 <!DOCTYPE html> <html> <body> <script language="javascript"> window.location = 'customscheme://customHost/49FYTJTF00'; </script> </body> </html> 

Los usuarios que aterrizan en esta página se le pedirá automáticamente con un diálogo de selector de actividad o directamente a su actividad.

Para probarlo, abra el navegador de Android, vaya a la url a continuación y copie pegar el fragmento anterior en el editor: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_intro

Gif mostrando navegador + JavaScript abriendo la Actividad

Gif

Puesto original

He probado tu URI personalizado y funciona en Android 5.0

Pero debe tener en cuenta los siguientes dos errores o problemas:

  1. Bug 459156 del proyecto Chromium Esto básicamente significa que el lanzamiento de esquemas personalizados desde el navegador de Android no funciona a menos que la URL se aplique utilizando JavaScript. Para obtener una solución, vea esta publicación StackOverflow: OAuth y el esquema personalizado dan como resultado "ERR_UNKNOWN_URL_SCHEME" en Chrome
  2. Bug 80971: URI con esquema personalizado no se puede hacer clic en SMS Text (Linkify?)

Mi acercamiento

Creé dos actividades separadas, una como receptor intencional y la otra como lanzadora intencional. La actividad de lanzamiento tiene un EditText donde se puede introducir el URI completo y un botón para iniciar el URI introducido.

Main.java onClick (Actividad de lanzamiento)

 @Override public void onClick(View view) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(input.getText().toString())); try { startActivity(intent); } catch(ActivityNotFoundException e){ Toast.makeText(this, "Auww!! No Activity can open this URI!", Toast.LENGTH_SHORT).show(); } } 

Manifest.xml (solo las actividades)

Tenga en cuenta la parte <data android:pathPattern=".*"/> . Esta parte es importante para que cualquier cosa después de que el anfitrión será aceptado como válido.

 <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".UriActivity" android:label="@string/app_name"> <!-- This intent-filter will open any URI with the following forms: customscheme://customHost/49FYTJTF00 customscheme://customHost https://www.google.com/something/something http://www.google.com/ http://google.com/something --> <intent-filter> <data android:scheme="https"/> <data android:scheme="http"/> <data android:host="google.com"/> <data android:host="www.google.com"/> <data android:scheme="customscheme"/> <data android:host="customHost"/> <data android:pathPattern=".*"/> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity> 

UriActivity.java (Actividad de recepción)

 public class UriActivity extends ActionBarActivity { private TextView tvText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_uri); tvText = (TextView) findViewById(R.id.text); setTextFromIntent(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setTextFromIntent(); } private void setTextFromIntent(){ StringBuilder text = new StringBuilder(); Uri data = getIntent().getData(); if(data != null){ text.append("Path:\n"); text.append(data.getPath()); text.append("\n\nScheme:\n"); text.append(data.getScheme()); text.append("\n\nHost:\n"); text.append(data.getHost()); text.append("\n\nPath segments:\n"); text.append(Arrays.toString(data.getPathSegments().toArray())); } else { text.append("Uri is null"); } tvText.setText(text); } } 

Captura de pantalla:

Resultado del envío de la intención personalizada a la UriActivity

Descarga del proyecto de prueba:

Hice una descarga para el proyecto si usted wan't para probarlo usted mismo.

En lugar de usar un vínculo a customScheme: // customHost / 49FYTJTF00, has intentado usar un vínculo como

 <a href="intent://customHostName/49FYTJTF00#Intent;scheme=customScheme;end"> 

Chrome debe ser capaz de abrir que en su aplicación muy bien. Al mismo tiempo, esto podría no funcionar en todos los navegadores.

Tu escribiste:

  <data android:host="customHostName" android:scheme="customScheme" /> 

Por lo tanto, use customScheme://customHostName/49FYTJTF00
En lugar de customScheme://customHost/49FYTJTF00

Ten en cuenta que si quieres ejecutar la aplicación desde Google Chrome, debes hacerlo de otra manera .

Utilice por favor pathprefix.

  android:pathPrefix="/" 

Podría resolver su problema. Siga la URL de la guía de desarrolladores de android .

  • Obtenga la etiqueta NFC con NDEF Android Application Record (AAR)
  • Abrir aplicación de URL funciona en Firefox para Android pero no en Google Chrome
  • Android External App Install (en la tarjeta SD), vuelva a cargar las alarmas del alarmmanager al re-montar a través del receptor
  • declarando el tipo de mime para un "archivo personalizado" que se va a enviar a través de bluetooth
  • Cómo compartir imagen + texto juntos usando ACTION_SEND en android?
  • ¿Cuál es el propósito de "android.intent.category.DEFAULT"?
  • Permiso de dispositivo USB y filtro de intenciones Android
  • Android BroadcastReceiver sin filtros intencionales
  • Cómo filtrar correctamente Paquete reemplazado broadcast
  • Android - ¿Cómo obtener una lista de todos los filtros de intención disponibles?
  • Actividad de Android sin GUI
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.