Bagian ini menunjukkan cara membuat panggilan hello world antar-profil dalam aplikasi Anda. Dengan ini, Anda akan terbiasa dengan SDK dan implementasi yang tepat untuk dijalankan bersama. Anda disarankan untuk secara aktif mengikuti dengan mengembangkannya di aplikasi Anda.
Menyiapkan perangkat pengujian dengan profil kerja
Google membuat aplikasi Test DPC untuk membantu Anda menyimulasikan dan menguji model di perangkat Anda sendiri. Tindakan ini akan menyiapkan profil kerja dan memberi Anda dengan kontrol untuk mengaktifkan atau menonaktifkan fitur tertentu pada perangkat.
Menginstal aplikasi Test DPC
Buka Google Play Store dan download aplikasi Test DPC.
Menyiapkan profil kerja
Setelah aplikasi diinstal, Anda akan melihat dua ikon muncul di perangkat, sebuah ikon penyiapan dan ikon aplikasi Test DPC. Ketuk ikon penyiapan dan ikuti langkah.
Sekarang Anda memiliki dua profil terpisah, yakni satu untuk aplikasi pribadi dan satu untuk aplikasi kerja. Anda dapat beralih di antara keduanya melalui tab di bagian atas daftar aplikasi.
Saat menginstal aplikasi Anda, biasanya aplikasi akan diinstal secara otomatis di
untuk profil. Jika Anda perlu menginstalnya secara eksplisit ke dalam profil kerja, Anda
dapat menggunakan argumen --user
dengan penginstalan adb.
$ adb install --user [id number of profile] [path of apk file]
Untuk mengetahui detail selengkapnya tentang cara menyiapkan perangkat pengujian, buka link ini.
Memastikan aplikasi Anda dikonfigurasi dengan benar
Mengaktifkan java 8 tim dukungan dan memastikan minSdk Anda minimal 19.
Menambahkan dependensi 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'
}
Kami menggunakan Guava dalam contoh ini. Ini bukan persyaratan untuk
menggunakan SDK, namun
mengikuti halo dunia, Anda juga harus menambahkan
api("com.google.guava:guava:29.0-android")
.
Membuat class baru yang akan berisi panggilan antar-profil pengujian
Agar lebih bermanfaat nanti, Anda harus memasukkannya ke dalam paket yang sama dengan ingin panggilan antar-profil Anda yang sebenarnya dapat diterima.
public class HelloWorld {
@CrossProfile
public ListenableFuture<String> helloWorld() {
return Futures.immediateFuture("Hello world");
}
}
Jika Anda tidak dapat bergantung pada dukungan Guava for Futures, ikuti saja saat ini dan melihat langkah terakhir yang memberitahu Anda perubahan apa yang harus dilakukan.
Melakukan panggilan antar-profil
Anda dapat melakukannya di kelas yang perlu melakukan panggilan antar-profil sungguhan nanti.
// 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());
Memberikan instance ke SDK
Tentu saja, panggilan metode helloWorld
yang disebutkan sebelumnya berasal dari
dan bukan yang asli. Sering kali, class asli Anda berupa singleton atau
class kompleks yang bergantung pada framework injeksi dependensi seperti Dagger. Kepada
memungkinkan logika dipanggil pada class asli di profil lain, setiap kustom
Class @CrossProfile
harus memiliki metode penyedia yang sesuai di
Class @CrossProfileProvider
. Buat kelas ini.
public class HelloWorldProvider {
@CrossProfileProvider
public HelloWorld getHelloWorld() {
return new HelloWorld();
}
}
Pengkabelan tambahan
Pembuatan kode yang diperlukan untuk mendukung class dan metode kustom memerlukan sedikit kabel tambahan. Hal ini dilakukan untuk menangani kompleksitas yang memiliki banyak target build dan persyaratan visibilitas dalam skala besar.
Pertama, anotasikan kelas tingkat tinggi yang ada atau yang baru dengan
@CrossProfileConfiguration
, yang mengarah ke class penyedia Anda.
@CrossProfileConfiguration(providers = HelloWorldProvider.class)
abstract class HelloWorldConfiguration {}
Kedua, tambahkan layanan yang dihasilkan secara otomatis ke manifes Anda, di dalam
<application> tag
. Masalah ini mungkin tidak akan teratasi hingga Anda membuat project.
<service
android:name="com.google.android.enterprise.connectedapps.CrossProfileConnector_Service"
android:exported="false"/>
Terakhir, untuk tujuan pengembangan, beri diri Anda INTERACT_ACROSS_USERS
izin akses. Jika belum memilikinya, Anda tidak akan dapat menyimpannya
produksi, tetapi ini adalah cara termudah
untuk memulai. Pertama, tambahkan ke
manifes sebagai berikut:
<uses-permission
android:name="android.permission.INTERACT_ACROSS_USERS"
tools:ignore="ProtectedPermissions"/>
Kemudian, Anda bisa mendapatkan izin dari baris perintah dengan adb sebagai berikut ini (jika aplikasi Anda belum memilikinya):
adb shell pm grant <your package> android.permission.INTERACT_ACROSS_USERS
Jika tidak dapat mengandalkan Guava for Futures, Anda harus menyiapkan perubahan. Pertama, tampilkan "Hello World" (Halo Dunia) {i>string<i} secara langsung dan mencetak hasilnya informasi antar-profil. Kedua, karena panggilan ini sekarang sinkron, Anda harus melakukan panggilan antar-profil dan mencetak hasil di dalam pemroses koneksi Anda.
Saat Anda menjalankan kode yang tercantum di bagian ''buat kal antar-profil'' Anda akan melihat dua log untuk ''Hello World'', satu dari setiap profil. Jika Anda hanya mendapatkan satu log, pastikan Anda telah menginstal aplikasi Anda di kedua profil dan telah memberikan izin izin akses.