基本サンプル

このセクションでは、Google Cloud 内でクロス プロファイル Hello World 呼び出しを作成する方法について説明します。 説明します。これにより、SDK について理解を深め、 その上に構築するものですこのコースのステップに沿って アプリの開発を通じて アプリの品質を改善できます

仕事用プロファイルを使用してテストデバイスをセットアップする

Google が開発した Test DPC アプリを使用して、Managed Microsoft AD を 確認する必要があります仕事用プロファイルが設定され、Google Chat で デバイスの特定の機能を有効または無効にするコントロールがあります。

  • Test DPC アプリをインストールします。

    Google Play ストアを開き、Test DPC アプリをダウンロードします。

  • 仕事用プロファイルをセットアップする

    アプリがインストールされると、2 つのアイコンがデバイスに表示されます。 設定アイコンと [Test DPC app] アイコンをセットアップ アイコンをタップし、 できます。

これで、個人用アプリと仕事用アプリ用の 2 つの個別のプロファイルができました。 切り替えるにはアプリリストの上部にあるタブを使用します。

個人用/仕事用
プロフィール

アプリをインストールすると、通常は 定義できます。仕事用プロファイルに明示的にインストールする必要がある場合は、 adb install で --user 引数を使用できます。

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

テストデバイスの設定について詳しくは、こちらの リンクをご覧ください。

アプリケーションが適切に構成されていることを確認する

Java 8 を有効にする サポート minSdk が 19 以上であることを確認します

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'
}

この例では Guava を使用します。これは SDK を使用する際の要件ではありませんが、 hello world.com のようになります。 api("com.google.guava:guava:29.0-android")

テスト用のクロス プロファイル通話を含む新しいクラスを作成する

これを後でさらに活用するには、 本当のクロスプロファイル通話を 記録してほしいというものです

public class HelloWorld {

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

Guava for Futures のサポートに依存できない場合は、そのままフォローして、 最後のステップでは 必要な変更を確認できます

クロス プロファイル通話を行う

クラスで実際にクロス プロファイル通話を行う 後で説明します

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

インスタンスを SDK に提供する

前述の helloWorld メソッド呼び出しは、生成された 実際のクラスではありません。多くの場合、実際のクラスはシングルトンか Dagger などの依存関係インジェクション フレームワークに依存する複雑なクラス。宛先 他のプロファイルの実際のクラスでロジックを呼び出せるようにします。 @CrossProfile クラスには、対応するプロバイダ メソッドが @CrossProfileProvider クラス。このクラスを作成します。

public class HelloWorldProvider {

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

追加の配線

カスタムクラスとカスタム メソッドのサポートに必要なコード生成には、 少量の追加配線が必要になりますこれは、ハードウェアやソフトウェアに ビルド ターゲットと可視性の要件が大規模に維持されます。

まず、既存または新しい上位クラスに @CrossProfileConfiguration アノテーションを付け、プロバイダ クラスを参照します。

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

次に、自動生成されたサービスをマニフェストの <application> tag。これは、プロジェクトを構築するまで解決されない場合があります。

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

最後に、開発目的のため、INTERACT_ACROSS_USERS を自身に付与します。 付与します。これをまだお忘れの場合は、 最も簡単な方法です。まず マニフェストを次のように使用します。

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

次に、adb でコマンドラインを使用して、自身に権限を付与できます。 (アプリにまだない場合)。

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

Futures に Guava を使用できなかった場合、いくつか作成する必要があります できます。"Hello World" レスポンスを結果を出力します。 クロスプロファイルコールアウトの 例を見てみましょう2 つ目に これらの呼び出しは 同期的になったため クロス プロファイルの呼び出しと結果の印刷を 接続リスナー。

「クロス プロファイル カレンダーの作成」に記載されているコードを実行する場合次のように表示されます。 「Hello World」の 2 つのログ(各プロファイルから 1 つ)します。ログが 1 つしかない場合は、 両方のプロファイルにアプリをインストールし、 付与します。