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://).

¿Fue útil?

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

¿Cómo registrar alguna espacio de nombres URL? (miaplicacion: //app.start/) para acceder a su programa llamando a una dirección URL en el navegador en el sistema operativo Android

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top