Próbka podstawowa

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.

osobiste/służbowe
profil

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.