W tej sekcji pokazujemy, jak utworzyć połączenie hello world w profilu do aplikacji. Dzięki temu poznasz pakiet SDK z których warto zacząć korzystać. Zalecamy aktywne śledzenie tworząc aplikację.
Konfigurowanie urządzenia testowego z profilem służbowym
Google tworzy aplikację Test DPC, która pomaga symulować i testować zarządzane na Twoim urządzeniu. Skonfigurowa on profil służbowy i zapewni Ci za pomocą elementów sterujących umożliwiających włączanie i wyłączanie określonych funkcji urządzenia.
Zainstaluj aplikację Test DPC.
Otwórz Sklep Google Play i pobierz aplikację Test DPC.
Konfigurowanie profilu do pracy
Po zainstalowaniu aplikacji na urządzeniu powinny pojawić się 2 ikony: ikona konfiguracji i ikona aplikacji Test DPC. Kliknij ikonę konfiguracji i postępuj zgodnie z kroków.
Masz teraz 2 oddzielne profile – jeden na aplikacje osobiste i jeden do pracy. Możesz się między nimi przełączać, używając kart u góry listy aplikacji.
Przy instalowaniu aplikacji zazwyczaj automatycznie instaluje się ona w obu
profili. W razie potrzeby w profilu służbowym
w przypadku instalacji adb można używać argumentu --user
.
$ adb install --user [id number of profile] [path of apk file]
Więcej informacji o konfigurowaniu urządzenia testowego znajdziesz w tym artykule
Upewnij się, że aplikacja jest odpowiednio skonfigurowana
Włącz środowisko Java 8 pomocy i upewnij się, że parametr minSdk ma wartość co najmniej 19.
Dodaj zależności 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'
}
W tym przykładzie używamy nazwy Guava. Nie jest to wymagane do korzystania z pakietu SDK, ale aby można było wykonać przykład „hello world”, musisz też dodać api("com.google.guava:guava:29.0-android")
.
Utwórz nową klasę, która będzie zawierać testowe wywołanie między profilami
Aby później skorzystać z tej przydatnej funkcji, umieść go w tym samym pakiecie, w którym chcesz, aby Twoje prawdziwe połączenia z różnych profili były uwzględniane.
public class HelloWorld {
@CrossProfile
public ListenableFuture<String> helloWorld() {
return Futures.immediateFuture("Hello world");
}
}
Jeśli nie możesz polegać na wsparciu firmy Guava for Futures, Następnie przejdź na ostatni krok, na którym dowiesz się, jakie zmiany wprowadzić.
Wykonywanie połączenia między profilami
Możesz to zrobić podczas zajęć, które będą musiały wykonywać rzeczywiste połączenia między profilami później.
// 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());
Przekazywanie instancji do pakietu SDK
Oczywiście wspomniane wcześniej wywołanie metody helloWorld
jest generowane
klasa, a nie prawdziwa. Prawdziwe zajęcia często odbywają się w samotnych klasach
złożonych klas zależnych od platform wstrzykiwania zależności, takich jak Dagger. Do
umożliwiają wywołanie logiki na rzeczywistej klasie w drugim profilu,
Klasa @CrossProfile
musi mieć odpowiednią metodę dostawcy w
@CrossProfileProvider
zajęcia. Utwórz te zajęcia.
public class HelloWorldProvider {
@CrossProfileProvider
public HelloWorld getHelloWorld() {
return new HelloWorld();
}
}
Dodatkowe okablowanie
Generowanie kodu wymagane do obsługi niestandardowych klas i metod wymaga i niewielkiej ilości dodatkowego okablowania. Ma to na celu rozwiązanie złożonych problemów związanych wiele celów tworzenia i wymagań dotyczących widoczności na dużą skalę.
Najpierw dodaj adnotację do istniejących lub nowych zajęć wysokiego poziomu
@CrossProfileConfiguration
, wskazując klasy dostawcy.
@CrossProfileConfiguration(providers = HelloWorldProvider.class)
abstract class HelloWorldConfiguration {}
Po drugie dodaj automatycznie wygenerowaną usługę do pliku manifestu, wewnątrz pola
<application> tag
Problem może nie zostać rozwiązany, dopóki nie skompilujesz projektu.
<service
android:name="com.google.android.enterprise.connectedapps.CrossProfileConnector_Service"
android:exported="false"/>
Na koniec, do celów programistycznych, przyznaj sobie INTERACT_ACROSS_USERS
uprawnienia. Nie da się jej zapisać, jeśli jeszcze jej nie masz
ale to najprostsza metoda. Najpierw dodaj je do
plik manifestu w następujący sposób:
<uses-permission
android:name="android.permission.INTERACT_ACROSS_USERS"
tools:ignore="ProtectedPermissions"/>
Następnie możesz przyznać sobie te uprawnienia z poziomu wiersza poleceń, używając polecenia adb jako następujące informacje (jeśli jeszcze ich nie ma w Twojej aplikacji):
adb shell pm grant <your package> android.permission.INTERACT_ACROSS_USERS
Jeśli nie możecie polegać na Guavie w przyszłości, musicie zmian. Najpierw zwróć zapytanie „Hello, World” możesz wpisać tekst bezpośrednio, a potem wydrukować wyniki. w stosunku do wiadomości publicznej. Po drugie, ponieważ te wywołania są teraz synchroniczne, należy umieścić wywołanie między profilami, a wydrukowanie wyników w detektor połączenia.
Po uruchomieniu kodu wymienionego w sekcji „utwórz plik kalkulacyjny dla różnych profili”. zobaczysz dwa dzienniki dla „Hello World”, po jednym z każdego profilu. Jeśli masz tylko 1 dziennik, upewnij się, że w obu profilach masz zainstalowaną aplikację uprawnienia.