Di perangkat Android 10 (level API 29) dan yang lebih baru, Anda dapat menggunakan API peer to peer baru untuk
konfigurasi bootstrap untuk perangkat sekunder seperti Chromecast dan Google Home
perangkat keras. Fitur ini memungkinkan aplikasi Anda meminta pengguna untuk mengubah akses
titik tempat perangkat terhubung dengan menggunakan
WifiNetworkSpecifier
untuk mendeskripsikan properti
jaringan yang diminta.
Untuk menggunakan API ini, lakukan hal berikut:
Buat penentu jaringan Wi-Fi menggunakan
WifiNetworkSpecifier.Builder
Setel filter jaringan untuk mencocokkan jaringan yang akan dihubungkan, beserta jaringan yang diperlukan memiliki kredensial yang lengkap.
Tentukan kombinasi
SSID
,SSID pattern
,BSSID
, danBSSID pattern
untuk menyetel filter jaringan dalam setiap permintaan, dengan tunduk kepada persyaratan:- Setiap permintaan harus menyediakan setidaknya satu dari
SSID
,SSID pattern
,BSSID
, atauBSSID pattern
- Setiap permintaan hanya dapat menetapkan satu dari
SSID
atauSSID pattern
- Setiap permintaan hanya dapat menetapkan satu dari
BSSID
atauBSSID pattern
- Setiap permintaan harus menyediakan setidaknya satu dari
Tambahkan penentu ke permintaan jaringan bersama dengan
NetworkCallback
instance untuk melacak status permintaan.Jika pengguna menyetujui permintaan dan koneksi ke jaringan berhasil,
NetworkCallback.onAvailable()
dipanggil pada objek callback. Jika pengguna menolak permintaan atau jika koneksi ke jaringan gagal,NetworkCallback.onUnavailable()
dipanggil pada objek callback.
Memulai permintaan untuk terhubung ke perangkat peer akan membuka kotak dialog di perangkat yang sama, di mana pengguna perangkat dapat menerima permintaan koneksi.
Mem-bypass persetujuan pengguna
Setelah pengguna menyetujui jaringan yang akan disambungkan sebagai tanggapan atas permintaan dari aplikasi tertentu, perangkat akan menyimpan persetujuan untuk titik akses tertentu. Jika aplikasi membuat permintaan khusus untuk menghubungkan ke titik akses itu lagi, perangkat melewatkan fase persetujuan pengguna dan terhubung ke jaringan secara otomatis. Jika pengguna memilih untuk melupakan terhubung ke jaringan yang diminta oleh API, lalu koneksi ini disimpan persetujuan untuk kombinasi aplikasi dan jaringan tersebut akan dihapus, dan data di masa mendatang aplikasi dari aplikasi harus disetujui kembali oleh pengguna. Jika aplikasi membuat permintaan tidak spesifik, seperti dengan pola SSID atau BSSID, maka pengguna harus menyetujui permintaan tersebut.
Contoh kode
Contoh kode berikut menunjukkan cara menghubungkan ke jaringan terbuka dengan SSID
awalan "test"
dan OUI BSSID "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);