Ejemplo básico

En esta sección, se muestra cómo crear una llamada de Hello World con perfiles sincronizados dentro tu app. Esto te permitirá familiarizarte con el SDK implementación para desarrollarla. Te recomendamos que sigas las actividades de forma activa si desarrollas en tu app.

Configura un dispositivo de prueba con un perfil de trabajo

Google crea la app de prueba de DPC para ayudarte a simular y probar una app en tu propio dispositivo. Configurará un perfil de trabajo y te proporcionará con controles para habilitar o inhabilitar ciertas funciones en el dispositivo.

  • Instala la app de DPC de prueba.

    Abre Google Play Store y descarga la app de DPC de prueba.

  • Configura un perfil de trabajo

    Una vez que la app esté instalada, deberían aparecer dos íconos en el dispositivo, un el ícono de configuración y el ícono de la app de Probar DPC. Presiona el ícono de configuración y sigue pasos.

Ahora, tienes dos perfiles independientes: uno para las apps personales y otro para las apps de trabajo. Puedes cambiar entre estos por medio de las pestañas en la parte superior de la lista de apps.

personal/trabajo
perfil

Cuando instales tu app, esta se instalará automáticamente tanto en perfiles. Si alguna vez necesitas instalarlo explícitamente en el perfil de trabajo, puedes Puedes usar el argumento --user con adb install.

$ adb install --user [id number of profile] [path of apk file]

Para obtener más información sobre cómo configurar un dispositivo de prueba, visita esta página .

Asegúrate de que tu aplicación esté configurada correctamente

Habilitar Java 8 asistencia y asegúrate de que tu minSdk sea de al menos 19.

Cómo agregar dependencias de Gradle

dependencies {
  annotationProcessor
'com.google.android.enterprise.connectedapps:connectedapps-processor:1.1.2'
  implementation
'com.google.android.enterprise.connectedapps:connectedapps:1.1.2'
  implementation
'com.google.android.enterprise.connectedapps:connectedapps-annotations:1.1.2'
}

En este ejemplo, usamos Guava. Esto no es un requisito para usar el SDK, pero Síguenos con Hello World. También deberías agregar api("com.google.guava:guava:29.0-android")

Crea una clase nueva que contendrá tu llamada de prueba de perfiles sincronizados

Para que sea más útil más adelante, debes colocarlo en el mismo paquete en el que y querrías que se hicieran tus llamadas de perfil sincronizado.

public class HelloWorld {

  @CrossProfile
  public ListenableFuture<String> helloWorld() {
    return Futures.immediateFuture("Hello world");
  }
}

Si no puedes confiar en la asistencia de Guava for Futures, síguela por ahora y y, luego, consulta el paso final, que te indica los cambios que debes realizar.

Haz una llamada de perfil sincronizado

Podrías hacerlo en una clase que necesite hacer llamadas reales con perfiles sincronizados. más adelante.

// TODO: inject/pass these into the class later instead.
CrossProfileConnector crossProfileConnector =
  CrossProfileConnector.builder(this).build();
ProfileHelloWorld profileHelloWorld =
  ProfileHelloWorld.create(crossProfileConnector);

ListenableFuture<Map<Profile, String>> resultsFuture =
  profileHelloWorld.both().helloWorld();

FluentFuture.from(resultsFuture)
  .addCallback(new FutureCallback<Map<Profile, String>>() {
    @Override
    public void onSuccess(Map<Profile, String> results) {
      for (Profile profile : results.keySet()) {
        Log.w("tag", "CROSS_PROFILE profile: " + profile.asInt()
          +   "; result: " + results.get(profile));
      }
    }
    @Override
    public void onFailure(Throwable t) {
      Log.e(TAG, "Failed to say hello world on both profiles", t);
    }
  }, directExecutor());

Proporciona la instancia al SDK

Por supuesto, la llamada de método helloWorld que mencionamos antes se encuentra en un entorno generado clase y no la real. A menudo, tus clases reales son singleton clases complejas que dependen de frameworks de inyección de dependencias, como Dagger. Para permitir que se llame a la lógica en la clase real en el otro perfil, cada perfil La clase @CrossProfile debe tener un método de proveedor correspondiente en un Clase @CrossProfileProvider. Crea esta clase.

public class HelloWorldProvider {

  @CrossProfileProvider
  public HelloWorld getHelloWorld() {
    return new HelloWorld();
  }
}

Cableado adicional

La generación de código necesaria para admitir clases y métodos personalizados requiere un requiere poco cableado adicional. Esto es para hacer frente a la complejidad de tener muchos objetivos de compilación y requisitos de visibilidad a gran escala.

Primero, anota una clase de alto nivel nueva o existente con @CrossProfileConfiguration, que apunta a las clases de tu proveedor.

@CrossProfileConfiguration(providers = HelloWorldProvider.class)
abstract class HelloWorldConfiguration {}

Segundo, agrega a tu manifiesto el servicio generado automáticamente, dentro del <application> tag Es posible que esto no se resuelva hasta que compiles tu proyecto.

<service
android:name="com.google.android.enterprise.connectedapps.CrossProfileConnector_Service"
android:exported="false"/>

Por último, para fines de desarrollo, tómate el INTERACT_ACROSS_USERS permiso. Si aún no lo tienes, no podrás guardarlo en pero es la forma más fácil de comenzar. Primero, agrégalo a tu manifiesto de la siguiente manera:

<uses-permission
      android:name="android.permission.INTERACT_ACROSS_USERS"
      tools:ignore="ProtectedPermissions"/>

Luego, puedes otorgarte el permiso desde la línea de comandos con adb, como se indica a continuación: sigue (si tu app aún no lo tiene):

adb shell pm grant <your package> android.permission.INTERACT_ACROSS_USERS

Si no pudiste depender de Guava para Futures, tendrás que tomar algunas cambios. Primero, muestra el mensaje "Hello World" directamente e imprimir los resultados de la llamada del perfil sincronizado. En segundo lugar, como estas llamadas ahora son síncronas, colocar la llamada de perfil sincronizado e imprimir los resultados dentro del objeto de escucha de conexión.

Cuando ejecutes el código que aparece en "make a cross-profile cal" deberías ver dos registros para ''Hello World'', uno para cada perfil. Si solo obtienes un registro, asegúrate de haber instalado tu app en ambos perfiles y de haber otorgado los permiso.