Questa sezione mostra come creare una chiamata Hello World in più profili la tua app. Questo ti consentirà di acquisire familiarità con l'SDK e su cui basarci. Ti consigliamo di seguire attivamente sviluppando l'app nella tua app.
Configurare un dispositivo di test con un profilo di lavoro
Google crea l'app DPC di test per aiutarti a simulare e testare un modello gestito sul tuo dispositivo. Configurerà un profilo di lavoro e ti fornirà con controlli per attivare o disattivare determinate funzionalità sul dispositivo.
Installa l'app DPC di test
Apri il Google Play Store e scarica l'app DPC di test.
Configurare un profilo di lavoro
Una volta installata l'app, dovresti vedere due icone sul dispositivo: sull'icona di configurazione e sull'icona dell'app Test DPC. Tocca l'icona di configurazione e segui le passaggi.
Ora hai due profili separati, uno per le app personali e uno per le app di lavoro. Puoi spostarti tra le app tramite le schede nella parte superiore dell'elenco di app.
Quando installi l'app, di solito viene installata automaticamente in entrambi
profili. Se dovessi avere bisogno di installarla esplicitamente nel profilo di lavoro,
può utilizzare l'argomento --user
con adb install.
$ adb install --user [id number of profile] [path of apk file]
Per ulteriori dettagli sulla configurazione di un dispositivo di test, visita questo .
Assicurati che l'applicazione sia configurata correttamente
Abilita Java 8 assistenza e assicurati che il valore minSdk sia almeno 19.
Aggiungi dipendenze 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'
}
In questo esempio utilizziamo Guava. Questo non è un requisito per l'utilizzo dell'SDK, ma
segui hello world, dovresti anche aggiungere
api("com.google.guava:guava:29.0-android")
.
Crea una nuova classe che conterrà la chiamata di prova tra più profili
Per renderla più utile in seguito, dovresti inserirla nello stesso pacchetto in cui vuoi ricevere le chiamate reali in più profili.
public class HelloWorld {
@CrossProfile
public ListenableFuture<String> helloWorld() {
return Futures.immediateFuture("Hello world");
}
}
Se non puoi dipendere dall'assistenza di Guava for Futures, continua a seguirci per ora. quindi vedremo il passaggio finale che indica quali modifiche apportare.
Effettuare una chiamata con più profili
Potresti farlo in un corso che dovrà effettuare vere e proprie chiamate in più profili in un secondo momento.
// 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());
Fornisci l'istanza all'SDK
Ovviamente, la chiamata al metodo helloWorld
menzionata in precedenza fa parte di un
e non quella vera. Spesso, le vere classi sono singleton o altro
classi complesse dipendenti da framework di inserimento delle dipendenze come Dagger. A
consentire di chiamare la logica sulla classe reale sull'altro profilo, ciascun profilo
La classe @CrossProfile
deve avere un metodo provider corrispondente in un
@CrossProfileProvider
corso. Crea questo corso.
public class HelloWorldProvider {
@CrossProfileProvider
public HelloWorld getHelloWorld() {
return new HelloWorld();
}
}
Cavi aggiuntivi
La generazione del codice necessaria per supportare classi e metodi personalizzati richiede un una piccola quantità di cavi aggiuntivi. Questo per gestire le complessità del molti target di build e requisiti di visibilità su larga scala.
In primo luogo, annota una classe di alto livello esistente o nuova con
@CrossProfileConfiguration
, che rimanda alle classi del tuo provider.
@CrossProfileConfiguration(providers = HelloWorldProvider.class)
abstract class HelloWorldConfiguration {}
In secondo luogo, aggiungi il servizio generato automaticamente al tuo manifest, all'interno del
<application> tag
. Questo problema potrebbe non essere risolto finché non crei il progetto.
<service
android:name="com.google.android.enterprise.connectedapps.CrossProfileConnector_Service"
android:exported="false"/>
Infine, a scopo di sviluppo, offri INTERACT_ACROSS_USERS
autorizzazione. Se non l'hai già fatto, non potrai conservarlo
produzione, ma è il modo più semplice per iniziare. Aggiungilo anzitutto al tuo
manifest come segue:
<uses-permission
android:name="android.permission.INTERACT_ACROSS_USERS"
tools:ignore="ProtectedPermissions"/>
Successivamente, potete concedervi l'autorizzazione dalla riga di comando con adb (se la tua app non dispone già di questo):
adb shell pm grant <your package> android.permission.INTERACT_ACROSS_USERS
Se non avete potuto dipendere da Guava for Futures, dovrete effettuare alcune modifiche. Innanzitutto, restituisci "Hello World" la stringa e stampare i risultati del richiamo tra più profili. In secondo luogo, poiché queste chiamate ora sono sincrone, devi inserire la chiamata tra più profili e la stampa dei risultati all'interno del listener di connessioni.
Quando esegui il codice elencato in "make a cross-profile cal" dovresti vedere due log per "Hello World", uno per ogni profilo. Se visualizzi un solo log, assicurati di aver installato la tua app in entrambi i profili e di aver concesso autorizzazione.