Leer en inglés

Compartir a través de


Enlace Móvil para la continuidad de tareas entre dispositivos

Su aplicación móvil puede compartir mediante programación URL de sitios web recientes y vínculos a documentos con un equipo Windows que tenga configurado Enlace Móvil. Esta característica de continuidad de tareas está disponible en dispositivos Android integrados con la experiencia de "Vínculo a Windows".

Esta función solo está disponible en dispositivos compatibles para experiencias de Enlace Móvil.

En esta documentación se explica cómo integrar la aplicación con la API de continuidad de tareas de Enlace Móvil, incluidos los requisitos del escenario, el área expuesta y la aprobación de la característica de acceso limitado (LAF).

Obtenga más información sobre Enlace Móvil: Sincronización del smartphone con el equipo Windows.

Requisitos del escenario

La API de continuidad de tareas le permite sincronizar el contenido de la aplicación Android a través de un equipo Windows que tenga configurado Enlace Móvil. Se deben cumplir las condiciones siguientes para que se conceda acceso a esta API:

  • Sincronizar direcciones URL web que sean direcciones URL válidas a las que pueda acceder el equipo Windows
  • Sincronizar vínculos de documentos en la nube a los que pueda acceder el equipo Windows
  • Sincronizar vínculos de documentos locales al equipo Windows a los que se deba poder acceder en el dispositivo móvil a través de la aplicación
  • No sincronizar más de 60 veces por minuto
  • No sincronizar el contenido si el usuario no está interactuando con la experiencia de la aplicación

Enlace Móvil expondrá el contenido sincronizado en el nodo Aplicaciones en "Usados recientemente" y "Sitios web recientes" y en un control flotante de notificación.

Captura de pantalla de Enlace Móvil de aplicaciones y sitios web usados recientemente

Aprobación de la característica de acceso limitado (LAF)

La continuidad de tareas de Enlace Móvil es una característica de acceso limitado (LAF). Para obtener acceso a esta API, deberá obtener la aprobación de Microsoft para interoperar con el paquete de "Vínculo a Windows" precargado en dispositivos móviles Android.

Para solicitar acceso, envíe un email wincrossdeviceapi@microsoft.com con la información que se indica a continuación.

  • Descripción de la experiencia de usuario
  • Captura de pantalla de la aplicación en la que un usuario accede de forma nativa a documentos o web
  • PackageId de la aplicación
  • Vínculo de Google Play Store a la aplicación

Si se aprueba la solicitud, recibirá instrucciones sobre cómo obtener la característica. Las aprobaciones se basarán en la comunicación, siempre que el escenario cumpla con los Requisitos de escenario descritos anteriormente.

Gestión de datos

Al utilizar la API de continuidad de tareas de Enlace Móvil, Microsoft procesará y transferirá sus datos de acuerdo con el Contrato de servicios de Microsoft y la Declaración de privacidad de Microsoft. Los datos que se transfieren a los dispositivos vinculados del usuario se pueden procesar a través de los servicios en la nube de Microsoft para garantizar una transferencia fiable de datos entre dispositivos. Los datos administrados por esta API no se conservan mediante los servicios en la nube de Microsoft sujetos al control de usuario final.

El SDK entre dispositivos que integrará en el paquete garantiza que los datos proporcionados a la API solo se controlen mediante paquetes de Microsoft de confianza.

Para integrar la aplicación móvil Android con la API de continuidad de tareas de Enlace Móvil, deberá actualizar las declaraciones de manifiesto y, a continuación, enviar el contexto de la aplicación. Vea el ejemplo de códigos siguiente.

Declaraciones de manifiesto de aplicación de Android

La aplicación debe registrar un receptor de difusión para que el proveedor de contexto de la aplicación entre dispositivos participe en el contrato. El registro debe estar en el manifiesto de la siguiente manera.

<?xml version="1.0" encoding="utf-8"?>   
<manifest xmlns:android="http://schemas.android.com/apk/res/android"   
    <!--   
        If the app targets API 30 or higher, be sure to use the <queries>   
        and add com.microsoft.appmanager to the included packages.   
    -->   
    <queries>   
        <package android:name="com.microsoft.appmanager" />   
    </queries>   
    <application …     
        <!-- … -->   
       <!--   
           This is the receiver declaration for receiving broadcasts from LTW.   
           It needs to be exported with meta-data as this is checked for    

           The package before we send the broadcast.   
       -->   
       <receiver   
           android:name="com.microsoft.crossdevicesdk.continuity.AppContextBroadcastReceiver"  
           android:enabled="true"   
           android:exported="true">   
           <intent-filter>   
               <action android:name="com.microsoft.crossdevice.appcontextrequest" />   
           </intent-filter>   
   
            <meta-data   
                android:name="com.microsoft.crossdevice.sampleProviderMetadataName"   
                android:value="true" />   
        </receiver>   
    </application>   
</manifest>

Ejemplos de código para enviar contexto de la aplicación

Una vez agregadas las declaraciones de manifiesto, las aplicaciones asociadas pueden enviar su contexto de aplicación como se muestra en los ejemplos de código siguientes.

En este ejemplo se muestra cómo utilizar la interfaz de IAppContextEventHandler con Java.

IAppContextEventHandler appContextEventHandler = new IAppContextEventHandler() {  
    @Override  
    public void onContextRequestReceived(ContextRequestInfo contextRequestInfo) {  
        Log.d(TAG, String.format("onContextRequestReceived, type:%s", contextRequestInfo.getType()));  
        //Not necessary to do following things in here, just  
        //make sure to send app context after receiving broadcast.  
        AppContext appContext = new AppContext();  
        //...  
        //set parameter  
        appContext.setType(ProtocolConstants.TYPE_APPLICATION_CONTEXT);  
        appContext.setCreateTime(System.currentTimeMillis());  
        appContext.setLastUpdatedTime(System.currentTimeMillis());  
        appContext.setTitle("New PowerPoint Presentation");  
        appContext.setExtras("{\"DocInfo\":\"[{\"timestamp\":1672,\"DocTitle\":\"Book Sharing\",\"Index\":\"8\"}]\"}");  
        //...  
        AppContextManager.INSTANCE.sendAppContext(getApplicationContext(),appContext);  
    }  
  
    @Override  
    public void onInvalidContextRequestReceived(@NonNull Throwable throwable) {  
        Log.e(TAG, String.format("onInvalidContextRequestReceived: " + throwable.getMessage()));  
    }  

    @Override   
    public void onSyncServiceDisconnected() {   
        Log.d(TAG, String.format("onSyncServiceDisconnected"));   
    }  
};  
AppContextManager.INSTANCE.setAppContextEventHandler(appContextEventHandler);

En este ejemplo se muestra cómo utilizar una expresión de objeto para implementar la interfaz de IAppContextEventHandler con Kotlin.

val appContextEventHandler = object : IAppContextEventHandler { 
    override fun onContextRequestReceived(contextRequestInfo: ContextRequestInfo) { 
        Log.d(TAG, String.format("onContextRequestReceived, type:%s", contextRequestInfo.type)); 
        //Not necessary to do following things in here, just 
        //make sure to send app context after receiving broadcast. 
        var appContext = AppContext() 
        //... 
        //set parameter 
        appContext.type = ProtocolConstants.TYPE_APPLICATION_CONTEXT 
        appContext.createTime = System.currentTimeMillis() 
        appContext.lastUpdatedTime = System.currentTimeMillis() 
        appContext.setTitle("New PowerPoint Presentation") 
        appContext.setExtras("{\"DocInfo\":\"[{\"timestamp\":1672,\"DocTitle\":\"Book Sharing\",\"Index\":\"8\"}]\"}") 
        //... 
        AppContextManager.sendAppContext(applicationContext,appContext) 
    } 
 
    override fun onInvalidContextRequestReceived(throwable: Throwable) { 
        Log.e(TAG, String.format("onInvalidContextRequestReceived: " + throwable.message)) 
    } 
 
    override fun onSyncServiceDisconnected() { 
        Log.d(TAG, String.format("onSyncServiceDisconnected")) 
    } 
} 
AppContextManager.setAppContextEventHandler(appContextEventHandler)

Descripción del protocolo

El protocolo es una difusión sencilla que se envía desde "Vínculo a Windows" a cada uno de los paquetes que admiten un tipo específico de característica de contexto de aplicación cuando "Vínculo a Windows" está listo para obtener el contexto de la aplicación.

Campo de intención Llave Value
Action N/D com.microsoft.crossdevice.appcontextrequest Se ha corregido el vínculo a Windows. El solicitante será com.microsoft.appmanager
Extras (agrupación) version 2.0 (versión [secundaria].[principal])
Extras (agrupación) contentProviderUri content://com.microsoft.taskcontinuity/b695d1d8 Se genera de forma única para cada paquete.
Extras (agrupación) requestedContextType Si se proporciona, indique qué tipo de contexto de aplicación se solicita. Se trata de una marca binaria, por ahora tenemos dos tipos... Contexto de aplicación: 0x01 y contexto del historial del explorador: 0x02.

Después de recibir la difusión, el SDK se encargará de la validación y control de la información. Lo que se espera de los paquetes que reciben la difusión es que envíen el contexto de la aplicación para vincular con Windows. Las aplicaciones asociadas deben proporcionar los siguientes valores al enviar contexto de la aplicación:

Llave Value Información adicional
type [necesario] Marca binaria que indica qué tipo de contexto de aplicación se envía a LTW. El valor debe ser coherente con requestedContextType.
createTime [necesario] Marca de tiempo que representa la hora de creación del contexto de la aplicación.
lastUpdatedTime [necesario] Marca de tiempo que representa la hora de la última actualización del contexto de la aplicación. Cada vez que se actualizan los campos del contexto de la aplicación, se debe registrar la hora de actualización.
teamId [opcional] Se usa para identificar la organización o el grupo al que pertenece la aplicación.
intentUri [opcional] Se usa para indicar qué aplicación puede continuar el contexto de la aplicación entregado desde el dispositivo de origen.
appId [opcional] El paquete de la aplicación para la que es el contexto. Solo los proveedores de servicios de contexto deben usarlo. Consulte la documentación de Java. Si se omite, se usará el paquete del proveedor de respuesta de llamada.
title [opcional] Título de este contexto de aplicación, como un nombre de documento o un título de página web.
weblink [opcional] Dirección URL de la página web que se va a cargar en un explorador para continuar con el contexto de la aplicación.
preview [opcional] Bytes de la imagen de vista previa que pueden representar el contexto de la aplicación.
extras [opcional] Objeto de par clave-valor que contiene información de estado específica de la aplicación necesaria para continuar un contexto de aplicación en el dispositivo continuo. Debe proporcionar cuándo el contexto de la aplicación tiene sus datos únicos.
LifeTime [opcional] Duración del contexto de la aplicación en milisegundos. Solo se usa para escenarios en curso, si no se establece, el valor predeterminado es -1.

Para que sea compatible con la característica anterior de "Continuidad del explorador" mediante el SDK de X-Device 1.0, tenemos otros dos métodos adicionales agregados. Se deben proporcionar los siguientes valores al usar esta característica:

Campo de intención Llave Value
browserContextEmptyFlag [opcional] Marca para indicar si el contexto del explorador está vacío. Solo es aplicable a la característica Continuidad del explorador.
browserHistory [opcional] Contexto del historial de exploración de la aplicación. Solo es aplicable a la característica Continuidad del explorador. Actualmente, se recomienda proporcionar hasta 3 URI. Si se proporcionan más, se omitirán.

Las aplicaciones asociadas pueden llamar al addBrowserContext método para agregar el historial del explorador. Se deben proporcionar los siguientes valores al agregar el historial del explorador:

Llave Value
browserWebUri Un URI web que se abrirá en el explorador en el equipo.
(http: o https:)
title El título de la página web.
timestamp Marca de tiempo en que la página web se abrió por primera vez o se actualizó por última vez.
favIcon [opcional] En general, el icono de favoritos de la página web en bytes debe ser pequeño.

Repositorio entre dispositivos de Windows en GitHub

Busque información sobre cómo integrar el SDK entre dispositivos de Windows en el proyecto en el repositorio de Windows entre dispositivos en GitHub.

Para obtener una lista de las preguntas más frecuentes, consulte Preguntas más frecuentes sobre Enlace Móvil.