Einfaches Beispiel

In diesem Abschnitt erfahren Sie, wie Sie einen profilübergreifenden Hello World-Aufruf in für Ihre App. So werden Sie mit dem SDK vertraut und erhalten eine erste auf der Sie aufbauen können. Es wird empfohlen, aktiv mitzumachen. in Ihrer App entwickeln.

Testgerät mit Arbeitsprofil einrichten

Google entwickelt die Test-DPC-App, mit der Sie eine verwaltete Umgebung auf Ihrem eigenen Gerät. Dadurch wird ein Arbeitsprofil eingerichtet und Sie erhalten Steuerelemente, mit denen Sie bestimmte Funktionen auf dem Gerät aktivieren oder deaktivieren können.

  • Installieren Sie die DPC-Test-App.

    Öffnen Sie den Google Play Store und laden Sie die Test-DPC-App herunter.

  • Arbeitsprofil einrichten

    Sobald die App installiert ist, sollten auf dem Gerät zwei Symbole angezeigt werden: ein Einrichtungssymbol und das Symbol der DPC-App testen. Tippe auf das Einrichtungssymbol und folge der Schritte.

Jetzt haben Sie zwei separate Profile – eines für private und eines für geschäftliche Apps. Über die Tabs oben in der App-Liste können Sie zwischen ihnen wechseln.

privat/geschäftlich
Profil

Wenn Sie Ihre App installieren, wird sie normalerweise automatisch in beiden Profilen. Wenn Sie es explizit im Arbeitsprofil installieren müssen, kann das Argument --user mit „adb install“ verwenden.

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

Weitere Informationen zum Einrichten eines Testgeräts finden Sie in diesem Link.

Prüfen, ob die Anwendung richtig konfiguriert ist

Java 8 aktivieren Support und achten Sie darauf, dass Ihr minSdk mindestens 19 beträgt.

Gradle-Abhängigkeiten hinzufügen

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 diesem Beispiel verwenden wir Guava. Dies ist keine Voraussetzung für die Nutzung des SDK, „Hello World“ folgen, sollten Sie auch api("com.google.guava:guava:29.0-android")

Erstellen Sie eine neue Klasse, die Ihren profilübergreifenden Testaufruf enthält

Um diese später nützlicher zu machen, sollten Sie sie in dasselbe Paket einfügen, Ihre profilübergreifenden Anrufe eingehen.

public class HelloWorld {

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

Wenn Sie nicht auf den Support von Guava für Futures angewiesen sind, folgen Sie einfach den Anweisungen und sehen Sie sich den letzten Schritt an, in dem Sie die erforderlichen Änderungen vornehmen.

Profilübergreifender Anruf starten

Sie könnten dies in einem Kurs tun, der echte profilübergreifende Anrufe .

// 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());

Instanz für SDK bereitstellen

Natürlich erfolgt der zuvor erwähnte helloWorld-Methodenaufruf auf einer generierten und nicht mit dem echten. Oft sind Ihre echten Klassen Singleton- oder komplexe Klassen abhängig von Abhängigkeitsinjektions-Frameworks wie Dagger. Bis kann die Logik für die echte Klasse im anderen Profil aufgerufen werden, Die Klasse @CrossProfile muss eine entsprechende Anbietermethode in einer Klasse @CrossProfileProvider. Erstelle diesen Kurs.

public class HelloWorldProvider {

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

Zusätzliche Verkabelung

Für die Codegenerierung, die zur Unterstützung benutzerdefinierter Klassen und Methoden erforderlich ist, ist ein zusätzliche Verkabelung erforderlich. Dies dient der Bewältigung der Komplexität und hohe Sichtbarkeitsanforderungen zu entwickeln.

Erstens: Annotieren Sie eine vorhandene oder neue übergeordnete Klasse mit @CrossProfileConfiguration und verweist auf Ihre Anbieterklassen.

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

Fügen Sie zweitens den automatisch generierten Dienst zu Ihrem Manifest im <application> tag Dies wird möglicherweise erst behoben, wenn Sie Ihr Projekt erstellt haben.

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

Wählen Sie schließlich zu Entwicklungszwecken die INTERACT_ACROSS_USERS aus. Berechtigung. Wenn noch nicht geschehen, kannst du diese Information nicht speichern aber es ist der einfachste Weg, um loszulegen. Fügen Sie sie zuerst Ihrem folgendes Manifest:

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

Dann können Sie sich über die Befehlszeile mit adb die Berechtigung folgt (falls in Ihrer App noch nicht vorhanden):

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

Wenn Sie sich nicht auf Guava for Futures verlassen konnten, müssen Sie einige Änderungen. Geben Sie zuerst die „Hello World“- String direkt eingeben und die Ergebnisse des profilübergreifenden Callouts. Zweitens: Da diese Aufrufe jetzt synchron sind, sollten Sie den profilübergreifenden Aufruf und die Ausgabe der Ergebnisse im Verbindungs-Listener.

Wenn Sie den unter „Profilübergreifenden Aufruf erstellen“ aufgeführten Code ausführen, sollten Sie zwei Protokolle für „Hallo Welt“ sehen, eines aus jedem Profil. Wenn Sie nur ein Log erhalten, die App in beiden Profilen installiert und die Berechtigung.