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.
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.