Cómo implementar mi propio esquema URI en Android
-
20-09-2019 - |
Pregunta
decir que quiero para definir que un URI como por ejemplo:
myapp://path/to/what/i/want?d=This%20is%20a%20test
debe ser manejado por mi propia aplicación o servicio. Observe que el esquema es "myapp"
y no "http"
o "ftp"
. Eso es precisamente lo que pretendo: definir mi propio esquema URI de forma global para el sistema operativo Android. ¿Es esto posible?
Esto es algo análogo a lo que algunos programas ya lo hacen en, por ejemplo, los sistemas de Windows, tales como Skype (skype://
) o cualquier programa torrente descargador (torrent://
).
Solución
Esto es muy posible; se define el esquema de URI en su AndroidManifest.xml, utilizando la <data>
elemento. A configurar un filtro de intención con el elemento <data>
llenada, y usted será capaz de crear su propio esquema. ( Más sobre filtros intención y resolución intención aquí .)
Aquí hay un pequeño ejemplo:
<activity android:name=".MyUriActivity">
<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="myapp" android:host="path" />
</intent-filter>
</activity>
De acuerdo con la forma implícita intentos trabajo, es necesario definir al menos una acción y una categoría así; aquí Tomé Ver como la acción (aunque podría ser cualquier cosa), y se aseguró de añadir la categoría por defecto (ya que esto es necesario para todas las intenciones implícitas). Observe también cómo he añadido la categoría BROWSABLE -. Esto no es necesario, pero se le permitirá a su URI que se pueda abrir desde el navegador (una muy buena característica)
Otros consejos
Como complemento a la @DanielLew respuesta, para obtener los valores de los parameteres que tiene que hacer esto:
URI ejemplo: myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo
en su actividad:
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
String valueOne = uri.getQueryParameter("keyOne");
String valueTwo = uri.getQueryParameter("keyTwo");
}
Te recomiendo encarecidamente que no define su propio esquema. Esto va en contra de los estándares web para esquemas URI, que intenta controlar rígidamente esos nombres por una buena razón - para evitar conflictos de nombres entre diferentes entidades. Una vez que poner un enlace a su esquema en un sitio web, usted ha puesto ese pequeño espacio de nombres nombre en toda la totalidad de Internet, y se debe seguir esas normas.
Si lo que desea es ser capaz de tener un enlace a su propia aplicación, le recomiendo que siga el enfoque que he descrito aquí:
Otro enfoque alternativo a Diego es el uso de una biblioteca:
https://github.com/airbnb/DeepLinkDispatch
Se puede declarar simplemente las URIs que le gustaría manejar y los parámetros que le gustaría extraer a través de las anotaciones sobre la actividad, como:
@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
...
}
Como un plus, también se aprobaron los parámetros de consulta a lo largo de la actividad, así.
Como se hace la pregunta hace años, y Android se desarrolló mucho en este esquema URI.
De URI esquema original, a lo profundo del enlace, y ahora los enlaces de la aplicación Android.
Android ahora recomienda usar URLs HTTP, no definir su propio esquema URI. Debido Enlaces Android App utilizan HTTP URL que enlace a un sitio web de dominio es el propietario, por lo que ninguna otra aplicación puede utilizar sus enlaces. Puede comprobar la comparación de vínculo directo y en los enlaces de la aplicación Android de aquí
Ahora puede agregar fácilmente un esquema URI usando la opción de Android Studio: Herramientas> App Enlaces Asistente. Por favor, consulte los detalles al documento Android: https://developer.android. com / estudio / escritura / app-link-indexing.html