Saya mencoba membuat gattserver di aplikasi saya, sehingga dapat bertindak sebagai periferal. Pertama saya perhatikan bahwa kode yang saya tulis untuk pusat (klien) tidak dapat terhubung ke server (metode BluetoothGattCallback onConnectionStateChange memberikan status terkenal 113). Kemudian saya mencoba terhubung melalui aplikasi Playstore nrf connect yang juga tidak bisa. Iklan (juga dilakukan dalam kode saya) berfungsi. Kode klien serta nrf connect memindai dan mendeteksi iklan saya. Beginilah cara saya ingin memulai server saya:

BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mGattServer = mBluetoothManager.openGattServer(this, mGattServerCallback);

Saya mendefinisikan gattservercallback sebelumnya, sehingga baris dijalankan dan saya mendapatkan kembali instance BluetoothGattServer yang tidak NULL, persis seperti yang saya inginkan, saya bahkan dapat menambahkan layanan tanpa masalah:

btGattServer.addService(createService());

(createService mengembalikan instance Layanan)

Saya akan sangat menghargai bantuan dengan ini! Jika ada yang membutuhkan detail lebih lanjut atau kode lainnya (mis. kode yang memulai iklan), dengan senang hati saya akan memperbarui pertanyaan saya!

0
Lrnz 27 Mei 2020, 22:53

1 menjawab

Jawaban Terbaik

Saya menemukan jawabannya sendiri:

Untuk mulai beriklan, Anda perlu memanggil startAdvertising pada instance Advertiser. Panggilan ini membutuhkan tiga argumen, salah satunya adalah objek AdvertiseSettings. Saat saya membuat objek ini dengan pembuat AdvertiseSettings, saya tidak menyertakan .setConnectable(true).

Inilah sebabnya mengapa iklan itu sendiri berfungsi, tetapi aplikasi yang mencoba terhubung tidak bisa. (jadi .openGattServer sebenarnya membuka server yang tidak dapat dihubungkan)

0
Lrnz 28 Mei 2020, 11:37