本節將說明如何在以下位置建立跨設定檔的 Hello World 呼叫: 您將能熟悉 SDK 並 以建構基礎建議您主動跟上進度 開發優質的應用程式
使用工作資料夾設定測試裝置
Google 建構測試 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」記錄,一個來自個別設定檔。如果只收到一個記錄 確認您已在兩個設定檔中安裝應用程式,且已授予 權限。