基本樣本

本節將說明如何在以下位置建立跨設定檔的 Hello World 呼叫: 您將能熟悉 SDK 並 以建構基礎建議您主動跟上進度 開發優質的應用程式

使用工作資料夾設定測試裝置

Google 建構測試 DPC 應用程式,協助您模擬及測試受管理的 部署在裝置環境中裝置會設定工作資料夾 透過控制項啟用或停用裝置上的特定功能。

  • 安裝測試 DPC 應用程式

    開啟 Google Play 商店,並下載測試 DPC 應用程式。

  • 設定工作資料夾

    安裝應用程式後,裝置上就會顯示兩個圖示:設定圖示和 Test DPC 應用程式圖示。輕觸設定圖示,然後按照 100 萬步的訓練

現在有兩個不同的設定檔:一個適用於個人應用程式,另一個適用於工作應用程式。 您可透過應用程式清單頂部的分頁標籤進行切換。

個人/工作
個人資料

安裝應用程式時,系統通常會同時自動安裝這兩個版本的 如果需要在工作資料夾中明確安裝 可以在 ADB 安裝中使用 --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」 api("com.google.guava:guava:29.0-android")

建立包含測試跨設定檔呼叫的新類別

為了日後更加實用,建議您把程式碼放在 是否希望實際撥打你的跨設定檔通話

public class HelloWorld {

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

如果您無法仰賴 Guava 進行 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

如果無法依附 Guava for Futures,就需要填寫幾份文件 並輸入變更內容首先,傳回「Hello World」並輸出結果 跨設定檔呼叫其次,由於這些呼叫現在是同步的,因此您應在連線事件監聽器中放置跨設定檔呼叫,並列印結果。

執行「make a cross-profile cal」下列出的程式碼應該會看到 兩個「Hello World」記錄,一個來自個別設定檔。如果只收到一個記錄 確認您已在兩個設定檔中安裝應用程式,且已授予 權限。