Menghitung perangkat

API Windows.Devices.Enumeration memungkinkan Anda menemukan perangkat yang terhubung secara internal ke sistem, terhubung secara eksternal, atau dapat dideteksi melalui protokol nirkabel atau jaringan.

Sampel

Cara termampu untuk menghitung semua perangkat yang tersedia adalah dengan mengambil rekam jepret dengan perintah FindAllAsync (dijelaskan lebih lanjut di bagian di bawah).

async void enumerateSnapshot(){
  DeviceInformationCollection collection = await DeviceInformation.FindAllAsync();
}

Lihat Sampel enumerasi dan pemasangan perangkat untuk contoh API Windows.Devices.Enumeration yang lebih canggih.

API Enumerasi

Namespace Windows.Devices.Enumeration memungkinkan Anda menemukan perangkat yang terhubung secara internal ke sistem, terhubung secara eksternal, atau dapat dideteksi melalui protokol nirkabel atau jaringan. Beberapa fitur yang didukung oleh API ini meliputi:

  • Menemukan perangkat untuk disambungkan dengan aplikasi Anda.
  • Mendapatkan informasi tentang perangkat yang tersambung atau dapat ditemukan oleh sistem.
  • Minta aplikasi menerima pemberitahuan saat perangkat ditambahkan, menyambungkan, memutuskan sambungan, mengubah status online, atau mengubah properti lainnya.
  • Minta aplikasi menerima pemicu latar belakang saat perangkat tersambung, memutuskan sambungan, mengubah status online, atau mengubah properti lain.

API ini dapat menghitung perangkat melalui salah satu protokol dan bus berikut, asalkan perangkat individual dan sistem yang menjalankan aplikasi mendukung teknologi tersebut. Ini bukan daftar lengkap, dan protokol lain mungkin didukung oleh perangkat tertentu.

Dalam banyak kasus, Anda tidak perlu khawatir tentang menggunakan API enumerasi. Ini karena banyak API yang menggunakan perangkat akan secara otomatis memilih perangkat default yang sesuai atau menyediakan API enumerasi yang lebih efisien. Misalnya, MediaElement akan secara otomatis menggunakan perangkat perender audio default. Selama aplikasi Anda dapat menggunakan perangkat default, tidak perlu menggunakan API enumerasi di aplikasi Anda. API enumerasi menyediakan cara umum dan fleksibel bagi Anda untuk menemukan dan terhubung ke perangkat yang tersedia. Topik ini menyediakan informasi tentang menghitung perangkat dan menjelaskan empat cara umum untuk menghitung perangkat.

  • Menggunakan antarmuka pengguna DevicePicker
  • Menghitung rekam jepret perangkat yang saat ini dapat ditemukan oleh sistem
  • Menghitung perangkat yang saat ini dapat ditemukan dan watch untuk perubahan
  • Menghitung perangkat yang saat ini dapat ditemukan dan watch untuk perubahan tugas latar belakang

Objek DeviceInformation

Bekerja dengan API enumerasi, Anda akan sering perlu menggunakan objek DeviceInformation . Objek ini berisi sebagian besar informasi yang tersedia tentang perangkat. Tabel berikut menjelaskan beberapa properti DeviceInformation yang akan Anda minati. Untuk daftar lengkapnya, lihat halaman referensi untuk DeviceInformation.

Properti Komentar
DeviceInformation.Id Ini adalah pengidentifikasi unik perangkat dan disediakan sebagai variabel string. Dalam kebanyakan kasus, ini adalah nilai buram yang hanya akan Anda teruskan dari satu metode ke metode lain untuk menunjukkan perangkat tertentu yang Anda minati. Anda juga dapat menggunakan properti ini dan properti DeviceInformation.Kind setelah menutup aplikasi Anda dan membukanya kembali. Ini akan memastikan bahwa Anda dapat memulihkan dan menggunakan kembali objek DeviceInformation yang sama.
DeviceInformation.Kind Ini menunjukkan jenis objek perangkat yang diwakili oleh objek DeviceInformation . Ini bukan kategori perangkat atau jenis perangkat. Satu perangkat dapat diwakili oleh beberapa objek DeviceInformation yang berbeda dari berbagai jenis. Nilai yang mungkin untuk properti ini tercantum dalam DeviceInformationKind serta bagaimana nilai tersebut berhubungan satu sama lain.
DeviceInformation.Properties Tas properti ini berisi informasi yang diminta untuk objek DeviceInformation . Properti yang paling umum mudah dirujuk sebagai properti objek DeviceInformation , seperti dengan DeviceInformation.Name. Untuk informasi selengkapnya, lihat Properti informasi perangkat.

 

Antarmuka pengguna DevicePicker

DevicePicker adalah kontrol yang disediakan oleh Windows yang membuat UI kecil yang memungkinkan pengguna memilih perangkat dari daftar. Ini dapat disesuaikan dalam beberapa cara, seperti:

  • Mengontrol perangkat yang ditampilkan di UI dengan menambahkan SupportedDeviceSelectors, SupportedDeviceClasses, atau keduanya ke DevicePicker.Filter. Dalam kebanyakan kasus, Anda hanya perlu menambahkan satu pemilih atau kelas, tetapi jika Anda membutuhkan lebih dari satu, Anda dapat menambahkan beberapa. Jika Anda menambahkan beberapa pemilih atau kelas, mereka digabungkan menggunakan fungsi logika OR.
  • Tentukan properti yang ingin Anda ambil untuk perangkat. Anda dapat melakukan ini dengan menambahkan properti ke DevicePicker.RequestedProperties.
  • Ubah tampilan DevicePicker menggunakan Penampilan.
  • Tentukan ukuran dan lokasi DevicePicker ketika ditampilkan.

Saat DevicePicker ditampilkan, konten UI akan diperbarui secara otomatis jika perangkat ditambahkan, dihapus, atau diperbarui.

Catatan Anda tidak dapat menentukan DeviceInformationKind menggunakan DevicePicker. Jika Anda ingin memiliki perangkat dari DeviceInformationKind tertentu, Anda harus membangun DeviceWatcher dan menyediakan UI Anda sendiri.

 

Casting konten media dan DIAL juga masing-masing menyediakan pemilih mereka sendiri jika Anda ingin menggunakannya. Masing-masing adalah CastingDevicePicker dan DialDevicePicker.

Menghitung rekam jepret perangkat

Dalam beberapa skenario, DevicePicker tidak akan cocok untuk kebutuhan Anda dan Anda membutuhkan sesuatu yang lebih fleksibel. Mungkin Anda ingin membangun UI Anda sendiri atau perlu menghitung perangkat tanpa menampilkan UI kepada pengguna. Dalam situasi ini, Anda dapat menghitung rekam jepret perangkat. Ini melibatkan mencari melalui perangkat yang saat ini terhubung atau dipasangkan dengan sistem. Namun, Anda perlu menyadari bahwa metode ini hanya melihat rekam jepret perangkat yang tersedia, sehingga Anda tidak akan dapat menemukan perangkat yang terhubung setelah Menghitung melalui daftar. Anda juga tidak akan diberi tahu jika perangkat diperbarui atau dihapus. Potensi kelemahan lain yang perlu diperhatikan adalah bahwa metode ini akan menahan hasil apa pun sampai seluruh enumerasi selesai. Untuk alasan ini, Anda tidak boleh menggunakan metode ini ketika Anda tertarik pada objek AssociationEndpoint, AssociationEndpointContainer, atau AssociationEndpointService karena ditemukan melalui jaringan atau protokol nirkabel. Diperlukan waktu hingga 30 detik untuk menyelesaikannya. Dalam skenario itu, Anda harus menggunakan objek DeviceWatcher untuk menghitung melalui perangkat yang mungkin.

Untuk menghitung melalui rekam jepret perangkat, gunakan metode FindAllAsync . Metode ini menunggu hingga seluruh proses enumerasi selesai dan mengembalikan semua hasil sebagai satu objek DeviceInformationCollection . Metode ini juga kelebihan beban untuk memberi Anda beberapa opsi untuk memfilter hasil Anda dan membatasinya ke perangkat yang Anda minati. Anda dapat melakukan ini dengan menyediakan DeviceClass atau meneruskan pemilih perangkat. Pemilih perangkat adalah string Advanced Query Syntax (AQS) yang menentukan perangkat yang ingin Anda hitung. Untuk informasi selengkapnya, lihat Membangun pemilih perangkat.

Selain membatasi hasil, Anda juga dapat menentukan properti yang ingin Anda ambil untuk perangkat. Jika Anda melakukannya, properti yang ditentukan akan tersedia di tas properti untuk setiap objek DeviceInformation yang dikembalikan dalam koleksi. Penting untuk dicatat bahwa tidak semua properti tersedia untuk semua jenis perangkat. Untuk melihat properti apa yang tersedia untuk jenis perangkat mana, lihat Properti informasi perangkat.

Menghitung dan watch perangkat

Metode yang lebih kuat dan fleksibel untuk menghitung perangkat adalah membuat DeviceWatcher. Opsi ini memberikan fleksibilitas terbanyak saat Anda menghitung perangkat. Ini memungkinkan Anda untuk menghitung perangkat yang saat ini ada, dan juga menerima pemberitahuan ketika perangkat yang cocok dengan pemilih perangkat Anda ditambahkan, dihapus, atau properti berubah. Saat membuat DeviceWatcher, Anda menyediakan pemilih perangkat. Untuk informasi selengkapnya tentang pemilih perangkat, lihat Membangun pemilih perangkat. Setelah membuat pengamat, Anda akan menerima pemberitahuan berikut untuk perangkat apa pun yang cocok dengan kriteria yang Anda berikan.

  • Tambahkan pemberitahuan saat perangkat baru ditambahkan.
  • Perbarui pemberitahuan saat properti yang Anda minati diubah.
  • Hapus pemberitahuan saat perangkat tidak lagi tersedia atau tidak lagi cocok dengan filter Anda.

Dalam kebanyakan kasus di mana Anda menggunakan DeviceWatcher, Anda mempertahankan daftar perangkat dan menambahkannya, menghapus item darinya, atau memperbarui item saat pengamat menerima pembaruan dari perangkat yang Anda tonton. Saat Anda menerima pemberitahuan pembaruan, informasi yang diperbarui akan tersedia sebagai objek DeviceInformationUpdate . Untuk memperbarui daftar perangkat Anda, pertama-tama temukan DeviceInformation yang sesuai yang berubah. Kemudian panggil metode Perbarui untuk objek tersebut, yang menyediakan objek DeviceInformationUpdate . Ini adalah fungsi kenyamanan yang akan secara otomatis memperbarui objek DeviceInformation Anda.

Karena DeviceWatcher mengirim pemberitahuan saat perangkat tiba dan ketika berubah, Anda harus menggunakan metode menghitung perangkat ini ketika Anda tertarik dengan objek AssociationEndpoint, AssociationEndpointContainer, atau AssociationEndpointService karena mereka dijumlahkan melalui jaringan atau protokol nirkabel.

Untuk membuat DeviceWatcher, gunakan salah satu metode CreateWatcher . Metode ini kelebihan beban untuk memungkinkan Anda menentukan perangkat yang Anda minati. Anda dapat melakukan ini dengan menyediakan DeviceClass atau meneruskan pemilih perangkat. Pemilih perangkat adalah string AQS yang menentukan perangkat yang ingin Anda hitung. Untuk informasi selengkapnya, lihat Membangun pemilih perangkat. Anda juga dapat menentukan properti yang ingin Anda ambil untuk perangkat dan tertarik. Jika Anda melakukannya, properti yang ditentukan akan tersedia di tas properti untuk setiap objek DeviceInformation yang dikembalikan dalam koleksi. Penting untuk dicatat bahwa tidak semua properti tersedia untuk semua jenis perangkat. Untuk melihat properti apa yang tersedia untuk jenis perangkat mana, lihat Properti informasi perangkat

Menonton perangkat sebagai tugas latar belakang

Menonton perangkat sebagai tugas latar belakang sangat mirip dengan membuat DeviceWatcher seperti yang dijelaskan di atas. Bahkan, Anda masih perlu membuat objek DeviceWatcher normal terlebih dahulu seperti yang dijelaskan di bagian sebelumnya. Setelah membuatnya, Anda memanggil GetBackgroundTrigger alih-alih DeviceWatcher.Start. Saat Anda memanggil GetBackgroundTrigger, Anda harus menentukan notifikasi mana yang Anda minati: tambahkan, hapus, atau perbarui. Anda tidak dapat meminta pembaruan atau menghapus tanpa meminta penambahan juga. Setelah Anda mendaftarkan pemicu, DeviceWatcher akan mulai berjalan segera di latar belakang. Dari titik ini ke depan, setiap kali menerima pemberitahuan baru untuk aplikasi Anda yang cocok dengan kriteria Anda, tugas latar belakang akan memicu dan akan memberi Anda perubahan terbaru sejak terakhir memicu aplikasi Anda.

Penting Pertama kali DeviceWatcherTrigger memicu aplikasi Anda adalah ketika pengamat mencapai status EnumerationCompleted . Ini berarti akan berisi semua hasil awal. Setiap kali di masa mendatang memicu aplikasi Anda, itu hanya akan berisi tambahkan, perbarui, dan hapus pemberitahuan yang telah terjadi sejak pemicu terakhir. Ini sedikit berbeda dari objek DeviceWatcher latar depan karena hasil awal tidak masuk satu per satu dan hanya dikirimkan dalam bundel setelah EnumerationCompleted tercapai.

 

Beberapa protokol nirkabel berperilaku berbeda jika mereka memindai di latar belakang versus latar depan, atau mereka mungkin tidak mendukung pemindaian di latar belakang sama sekali. Ada tiga kemungkinan terkait pemindaian latar belakang. Tabel berikut mencantumkan kemungkinan dan efek yang mungkin ada pada aplikasi Anda. Misalnya, Bluetooth dan Wi-Fi Direct tidak mendukung pemindaian latar belakang, jadi dengan ekstensi, mereka tidak mendukung DeviceWatcherTrigger.

Aktivitas Dampak
Perilaku yang sama di latar belakang Tidak ada
Hanya pemindaian pasif yang dimungkinkan di latar belakang Perangkat mungkin membutuhkan waktu lebih lama untuk ditemukan saat menunggu pemindaian pasif terjadi.
Pemindaian latar belakang tidak didukung Tidak ada perangkat yang dapat dideteksi oleh DeviceWatcherTrigger, dan tidak ada pembaruan yang akan dilaporkan.

 

Jika DeviceWatcherTrigger Anda menyertakan protokol yang tidak mendukung pemindaian sebagai tugas latar belakang, pemicu Anda akan tetap berfungsi. Namun, Anda tidak akan bisa mendapatkan pembaruan atau hasil apa pun atas protokol tersebut. Pembaruan untuk protokol atau perangkat lain masih akan terdeteksi secara normal.

Menggunakan DeviceInformationKind

Dalam sebagian besar skenario, Anda tidak perlu khawatir tentang DeviceInformationKind dari objek DeviceInformation . Ini karena pemilih perangkat yang dikembalikan oleh API perangkat yang Anda gunakan akan sering menjamin Anda mendapatkan jenis objek perangkat yang benar untuk digunakan dengan API mereka. Namun, dalam beberapa skenario Anda akan ingin mendapatkan DeviceInformation untuk perangkat, tetapi tidak ada API perangkat yang sesuai untuk menyediakan pemilih perangkat. Dalam kasus ini, Anda harus membangun pemilih Anda sendiri. Misalnya, Layanan Web di Perangkat tidak memiliki API khusus, tetapi Anda dapat menemukan perangkat tersebut dan mendapatkan informasi tentangnya menggunakan API Windows.Devices.Enumeration lalu menggunakan API soket.

Jika Anda membangun pemilih perangkat Anda sendiri untuk menghitung melalui objek perangkat, DeviceInformationKind akan penting bagi Anda untuk memahami. Semua jenis yang mungkin, serta bagaimana mereka berhubungan satu sama lain, dijelaskan pada halaman referensi untuk DeviceInformationKind. Salah satu penggunaan DeviceInformationKind yang paling umum adalah menentukan jenis perangkat apa yang Anda cari saat mengirimkan kueri bersama dengan pemilih perangkat. Dengan melakukan ini, itu memastikan bahwa Anda hanya menghitung lebih dari perangkat yang cocok dengan DeviceInformationKind yang disediakan. Misalnya, Anda dapat menemukan objek DeviceInterface lalu menjalankan kueri untuk mendapatkan informasi untuk objek Perangkat induk. Objek induk tersebut mungkin berisi informasi tambahan.

Penting untuk dicatat bahwa properti yang tersedia di tas properti untuk objek DeviceInformation akan bervariasi tergantung pada DeviceInformationKind perangkat. Properti tertentu hanya tersedia dengan jenis tertentu. Untuk informasi selengkapnya tentang properti mana yang tersedia untuk jenisnya, lihat Properti informasi perangkat. Oleh karena itu, dalam contoh di atas, mencari Perangkat induk akan memberi Anda akses ke informasi lebih lanjut yang tidak tersedia dari objek perangkat DeviceInterface . Karena itu, saat Anda membuat string filter AQS, penting untuk memastikan bahwa properti yang diminta tersedia untuk objek DeviceInformationKind yang Anda hitung. Untuk informasi selengkapnya tentang membangun filter, lihat Membangun pemilih perangkat.

Saat menghitung objek AssociationEndpoint, AssociationEndpointContainer, atau AssociationEndpointService , Anda menghitung melalui protokol nirkabel atau jaringan. Dalam situasi ini, kami sarankan Anda tidak menggunakan FindAllAsync dan sebagai gantinya menggunakan CreateWatcher. Ini karena pencarian melalui jaringan sering menghasilkan operasi pencarian yang tidak akan habis waktu selama 10 detik atau lebih sebelum menghasilkan EnumerationCompleted. FindAllAsync tidak menyelesaikan operasinya sampai EnumerationCompleted dipicu . Jika Anda menggunakan DeviceWatcher, Anda akan mendapatkan hasil yang lebih dekat ke real time terlepas dari kapan EnumerationCompleted dipanggil .

Simpan perangkat untuk digunakan nanti

Objek DeviceInformation apa pun diidentifikasi secara unik oleh kombinasi dua informasi: DeviceInformation.Id dan DeviceInformation.Kind. Jika Anda menyimpan dua informasi ini, Anda dapat membuat ulang objek DeviceInformation setelah hilang dengan memberikan informasi ini ke CreateFromIdAsync. Jika Anda melakukan ini, Anda dapat menyimpan preferensi pengguna untuk perangkat yang terintegrasi dengan aplikasi Anda.