Di perangkat Android 10 (level API 29) dan yang lebih tinggi, Anda dapat menggunakan API peer-to-peer baru untuk melakukan konfigurasi bootstrap untuk perangkat sekunder seperti hardware Chromecast dan Google Home. Dengan fitur ini, aplikasi Anda dapat mengarahkan pengguna untuk mengubah titik akses yang terhubung dengan perangkat menggunakan WifiNetworkSpecifier
untuk mendeskripsikan properti jaringan yang diminta.
Untuk menggunakan API ini, lakukan hal berikut:
Buat specifier jaringan Wi-Fi menggunakan
WifiNetworkSpecifier.Builder
.Setel filter jaringan untuk mencocokkan jaringan yang akan dihubungkan, bersama dengan kredensial yang diperlukan.
Tentukan kombinasi
SSID
,SSID pattern
,BSSID
, danBSSID pattern
untuk menetapkan filter jaringan di setiap permintaan, yang tunduk pada persyaratan berikut:- Setiap permintaan harus menyediakan setidaknya satu dari
SSID
,SSID pattern
,BSSID
, atauBSSID pattern
- Setiap permintaan hanya dapat menyetel satu dari
SSID
atauSSID pattern
- Setiap permintaan hanya dapat menyetel satu dari
BSSID
atauBSSID pattern
- Setiap permintaan harus menyediakan setidaknya satu dari
Tambahkan specifier ke permintaan jaringan bersama dengan instance
NetworkCallback
untuk melacak status permintaan.Jika pengguna menerima permintaan dan koneksi ke jaringan berhasil,
NetworkCallback.onAvailable()
akan dipanggil pada objek callback. Jika pengguna menolak permintaan atau jika koneksi ke jaringan gagal,NetworkCallback.onUnavailable()
akan dipanggil pada objek callback.
Saat permintaan untuk terhubung ke perangkat peer diinisiasi, kotak dialog akan ditampilkan di perangkat yang sama, dan dari kotak dialog tersebut pengguna perangkat dapat menerima atau menolak permintaan koneksi.
Mem-bypass persetujuan pengguna
Setelah pengguna menyetujui jaringan untuk terhubung sebagai respons atas permintaan dari aplikasi tertentu, perangkat akan menyimpan persetujuan untuk titik akses tertentu. Jika aplikasi membuat permintaan khusus untuk terhubung ke titik akses tersebut lagi, perangkat akan melewati fase persetujuan pengguna dan secara otomatis terhubung ke jaringan. Jika pengguna memilih untuk melupakan jaringan saat terhubung ke jaringan yang diminta oleh API, persetujuan yang disimpan untuk kombinasi aplikasi dan jaringan tersebut akan dihapus, dan permintaan apa pun di masa mendatang dari aplikasi harus disetujui oleh pengguna lagi. Jika aplikasi membuat permintaan tidak spesifik, seperti dengan pola SSID atau BSSID, pengguna harus menyetujui permintaan tersebut.
Contoh kode
Contoh kode berikut menunjukkan cara terhubung ke jaringan terbuka dengan awalan
SSID "test"
dan BSSID OUI "10:03:23"
:
Kotlin
val specifier = WifiNetworkSpecifier.Builder() .setSsidPattern(PatternMatcher("test", PatternMatcher.PATTERN_PREFIX)) .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00")) .build() val request = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build() val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networkCallback = object : ConnectivityManager.NetworkCallback() { ... override fun onAvailable(network: Network?) { // do success processing here.. } override fun onUnavailable() { // do failure processing here.. } ... } connectivityManager.requestNetwork(request, networkCallback) ... // Release the request when done. connectivityManager.unregisterNetworkCallback(networkCallback)
Java
final NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() .setSsidPattern(new PatternMatcher("test", PatternMatcher.PATTERN_PREFIX)) .setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00")) .build(); final NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build(); final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkCallback networkCallback = new NetworkCallback() { ... @Override void onAvailable(...) { // do success processing here.. } @Override void onUnavailable(...) { // do failure processing here.. } ... }; connectivityManager.requestNetwork(request, networkCallback); ... // Release the request when done. connectivityManager.unregisterNetworkCallback(networkCallback);