Bagikan melalui


Menemukan perangkat jarak jauh

Aplikasi Anda dapat menggunakan jaringan nirkabel, Bluetooth, dan koneksi cloud untuk menemukan perangkat Windows yang masuk dengan akun Microsoft yang sama dengan perangkat penemuan. Perangkat jarak jauh tidak perlu menginstal perangkat lunak khusus agar dapat ditemukan.

Catatan

Panduan ini mengasumsikan Anda telah diberikan akses ke fitur Sistem Jarak Jauh dengan mengikuti langkah-langkah di Meluncurkan aplikasi jarak jauh.

Memfilter set perangkat yang dapat ditemukan

Anda dapat mempersempit set perangkat yang dapat ditemukan dengan menggunakan RemoteSystemWatcher dengan filter. Filter dapat mendeteksi jenis penemuan (proksimal vs. jaringan lokal vs. koneksi cloud), jenis perangkat (desktop, perangkat seluler, Xbox, Hub, dan Holografik), dan status ketersediaan (status ketersediaan perangkat untuk menggunakan fitur Sistem Jarak Jauh).

Objek filter harus dibangun sebelum atau saat objek RemoteSystemWatcher diinisialisasi, karena diteruskan sebagai parameter ke dalam konstruktornya. Kode berikut membuat filter dari setiap jenis yang tersedia lalu menambahkannya ke daftar.

Catatan

Kode dalam contoh ini mengharuskan Anda memiliki using Windows.System.RemoteSystems pernyataan dalam file Anda.

private List<IRemoteSystemFilter> makeFilterList()
{
    // construct an empty list
    List<IRemoteSystemFilter> localListOfFilters = new List<IRemoteSystemFilter>();

    // construct a discovery type filter that only allows "proximal" connections:
    RemoteSystemDiscoveryTypeFilter discoveryFilter = new RemoteSystemDiscoveryTypeFilter(RemoteSystemDiscoveryType.Proximal);


    // construct a device type filter that only allows desktop and mobile devices:
    // For this kind of filter, we must first create an IIterable of strings representing the device types to allow.
    // These strings are stored as static read-only properties of the RemoteSystemKinds class.
    List<String> listOfTypes = new List<String>();
    listOfTypes.Add(RemoteSystemKinds.Desktop);
    listOfTypes.Add(RemoteSystemKinds.Phone);

    // Put the list of device types into the constructor of the filter
    RemoteSystemKindFilter kindFilter = new RemoteSystemKindFilter(listOfTypes);


    // construct an availibility status filter that only allows devices marked as available:
    RemoteSystemStatusTypeFilter statusFilter = new RemoteSystemStatusTypeFilter(RemoteSystemStatusType.Available);


    // add the 3 filters to the listL
    localListOfFilters.Add(discoveryFilter);
    localListOfFilters.Add(kindFilter);
    localListOfFilters.Add(statusFilter);

    // return the list
    return localListOfFilters;
}

Catatan

Nilai filter "proksimal" tidak menjamin tingkat kedekatan fisik. Untuk skenario yang memerlukan kedekatan fisik yang andal, gunakan nilai RemoteSystemDiscoveryType.SpatiallyProximal di filter Anda. Saat ini, filter ini hanya memungkinkan perangkat yang ditemukan oleh Bluetooth. Karena mekanisme dan protokol penemuan baru yang menjamin kedekatan fisik juga didukung, mekanisme tersebut juga akan disertakan di sini.
Ada juga properti di kelas RemoteSystem yang menunjukkan apakah perangkat yang ditemukan sebenarnya berada dalam kedekatan fisik: RemoteSystem.IsAvailableBySpatialProximity.

Catatan

Jika Anda ingin menemukan perangkat melalui jaringan lokal (ditentukan oleh pilihan filter jenis penemuan Anda), jaringan Anda harus menggunakan profil "privat" atau "domain". Perangkat Anda tidak akan menemukan perangkat lain melalui jaringan "publik".

Setelah daftar objek IRemoteSystemFilter dibuat, objek tersebut dapat diteruskan ke konstruktor RemoteSystemWatcher.

// store filter list
List<IRemoteSystemFilter> listOfFilters = makeFilterList();

// construct watcher with the list
m_remoteSystemWatcher = RemoteSystem.CreateWatcher(listOfFilters);

Ketika metode Mulai pengamat ini dipanggil, metode ini akan menaikkan peristiwa RemoteSystemAdded hanya jika perangkat terdeteksi yang memenuhi semua kriteria berikut:

  • Ini dapat ditemukan oleh koneksi proksimal
  • Ini adalah desktop atau telepon
  • Ini diklasifikasikan sebagai tersedia

Dari sana, prosedur untuk menangani peristiwa, mengambil objek RemoteSystem, dan menyambungkan ke perangkat jarak jauh persis sama seperti di Meluncurkan aplikasi jarak jauh. Singkatnya , objek RemoteSystem disimpan sebagai properti objek RemoteSystemAddedEventArgs , yang diteruskan dengan setiap peristiwa RemoteSystemAdded .

Menemukan perangkat berdasarkan input alamat

Beberapa perangkat mungkin tidak terkait dengan pengguna atau dapat ditemukan dengan pemindaian, tetapi masih dapat dijangkau jika aplikasi penemuan menggunakan alamat langsung. Kelas HostName digunakan untuk mewakili alamat perangkat jarak jauh. Ini sering disimpan dalam bentuk alamat IP, tetapi beberapa format lain diizinkan (lihat konstruktor HostName untuk detailnya).

Objek RemoteSystem diambil jika objek HostName yang valid disediakan. Jika data alamat tidak valid, null referensi objek dikembalikan.

private async Task<RemoteSystem> getDeviceByAddressAsync(string IPaddress)
{
    // construct a HostName object
    Windows.Networking.HostName deviceHost = new Windows.Networking.HostName(IPaddress);

    // create a RemoteSystem object with the HostName
    RemoteSystem remotesys = await RemoteSystem.FindByHostNameAsync(deviceHost);

    return remotesys;
}

Mengkueri kemampuan pada sistem jarak jauh

Meskipun terpisah dari pemfilteran penemuan, mengkueri kemampuan perangkat dapat menjadi bagian penting dari proses penemuan. Dengan menggunakan metode RemoteSystem.GetCapabilitySupportedAsync, Anda dapat meminta sistem jarak jauh yang ditemukan untuk dukungan kemampuan tertentu seperti konektivitas sesi jarak jauh atau berbagi entitas spasial (holografik). Lihat kelas KnownRemoteSystemCapabilities untuk daftar kemampuan yang dapat dikueri.

// Check to see if the given remote system can accept LaunchUri requests
bool isRemoteSystemLaunchUriCapable = remoteSystem.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.LaunchUri);

Penemuan lintas pengguna

Pengembang dapat menentukan penemuan semua perangkat yang berdekatan dengan perangkat klien, bukan hanya perangkat yang terdaftar untuk pengguna yang sama. Ini diimplementasikan melalui IRemoteSystemFilter khusus, RemoteSystemAuthorizationKindFilter. Ini diimplementasikan seperti jenis filter lainnya:

// Construct a user type filter that includes anonymous devices
RemoteSystemAuthorizationKindFilter authorizationKindFilter = new RemoteSystemAuthorizationKindFilter(RemoteSystemAuthorizationKind.Anonymous);
// then add this filter to the RemoteSystemWatcher
  • Nilai RemoteSystemAuthorizationKind dari Anonim akan memungkinkan penemuan semua perangkat proksimal, bahkan yang berasal dari pengguna yang tidak tepercaya.
  • Nilai SameUser memfilter penemuan hanya ke perangkat yang terdaftar ke pengguna yang sama dengan perangkat klien. Ini adalah perilaku default.

Memeriksa pengaturan Berbagi Lintas Pengguna

Selain filter di atas yang ditentukan di aplikasi penemuan Anda, perangkat klien itu sendiri juga harus dikonfigurasi untuk memungkinkan pengalaman bersama dari perangkat yang masuk dengan pengguna lain. Ini adalah pengaturan sistem yang dapat dikueri dengan metode statis di kelas RemoteSystem :

if (!RemoteSystem.IsAuthorizationKindEnabled(RemoteSystemAuthorizationKind.Anonymous)) {
	// The system is not authorized to connect to cross-user devices. 
	// Inform the user that they can discover more devices if they
	// update the setting to "Anonymous".
}

Untuk mengubah pengaturan ini, pengguna harus membuka aplikasi Pengaturan . Di menu Berbagi pengalaman>Bersama Sistem>di seluruh perangkat, ada kotak drop-down tempat pengguna dapat menentukan perangkat mana yang dapat dibagikan sistem mereka.

halaman pengaturan pengalaman bersama