Saat ini saya sedang mengembangkan aplikasi yang akan menggunakan Bluetooth Low Energy (pengujian pada Nexus 4). Setelah memulai dengan API BLE resmi di Android 4.3, saya perhatikan bahwa setelah saya menghubungkan perangkat untuk pertama kalinya, saya jarang dapat berhasil terhubung ke / berkomunikasi dengan perangkat itu atau perangkat lain lagi.
Mengikuti panduan di sini , saya dapat berhasil terhubung ke perangkat, memindai layanan dan karakteristik, dan membaca / menulis / menerima pemberitahuan tanpa masalah. Namun, setelah memutuskan dan menghubungkan kembali, saya sering tidak dapat memindai layanan / karakteristik atau tidak dapat menyelesaikan membaca / menulis. Saya tidak dapat menemukan apa pun di log untuk menunjukkan mengapa ini terjadi.
Setelah ini terjadi, saya harus menghapus aplikasi, menonaktifkan Bluetooth, dan me-restart telepon sebelum mulai berfungsi lagi.
Setiap kali perangkat terputus saya pastikan untuk memanggil tutup () pada objek BluetoothGatt dan mengaturnya ke nol. Ada wawasan?
EDIT:
Log dumps: Untuk log-log ini saya me-root-kan ponsel saya dan menaikkan level jejak dari item-item terkait di /etc/bluetooth/bt_stack.conf
Koneksi yang sukses - Upaya pertama setelah me-reboot ponsel dan menginstal aplikasi. Saya dapat terhubung, menemukan semua layanan / karakteristik, dan membaca / menulis.
Upaya Gagal 1 - Ini adalah upaya berikutnya setelah memutuskan sambungan dari koneksi yang berhasil di atas. Tampaknya saya dapat menemukan karakteristik, tetapi upaya pertama untuk membaca mengembalikan nilai nol dan segera terputus setelahnya.
Upaya Gagal 2 - Contoh di mana saya bahkan tidak dapat menemukan layanan / karakteristik.
EDIT 2:
Perangkat yang saya coba sambungkan didasarkan pada chip CC2541 TI. Saya memperoleh TI SensorTag (juga didasarkan pada CC2541) untuk bermain-main dan menemukan bahwa TI merilis aplikasi android untuk SensorTag kemarin. Namun, aplikasi ini memiliki masalah yang sama. Saya menguji ini pada dua Nexus 4 lainnya dengan hasil yang sama: Koneksi ke SensorTag berhasil pertama kali atau kedua, tetapi (menurut log) gagal menemukan layanan setelahnya, menyebabkan semua jenis crash. Saya mulai bertanya-tanya apakah ini masalah dengan chip khusus ini?
Jawaban:
Petunjuk implementasi penting
(Mungkin beberapa petunjuk itu tidak diperlukan lagi karena pembaruan OS Android.)
android.bluetooth.BluetoothGatt#close()
onLeScan(..)
dan kemudian hubungkan. Alasan:BluetoothDevice#connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback)
selalu gagal, jika dipanggil diLeScanCallback() {...}.onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
dalam utas yang sama pada Samsung Galaxy S3 dengan Android 4.3 (setidaknya untuk build JSS15J.I9300XXUGMK6)android.bluetooth.BluetoothAdapter#startLeScan(UUID[] serviceUuids, LeScanCallback callback)
dengan parameter untuk memfilter UUID layanan tertentu karena ini rusak sepenuhnya di Samsung Galaxy S3 dengan Android 4.3 dan tidak bekerja untuk UUID 128bit secara umum.Tutorial untuk pemula
Titik masuk yang cukup OK untuk pendatang baru bisa berupa video tutorial ini: Mengembangkan Aplikasi Bluetooth Cerdas untuk Android http://youtu.be/x1y4tEHDwk0
Masalah dan penyelesaian yang dijelaskan di bawah mungkin diperbaiki sekarang oleh pembaruan OS
Mengatasi: Saya bisa "menstabilkan" aplikasi saya melakukan itu ...
Pekerjaan ini didasarkan pada pengalaman berikut ...
sumber
Mematikan WIFI:
Saya dapat mengonfirmasi juga, bahwa mematikan WIFI membuat Bluetooth 4.0 lebih stabil terutama pada Google Nexus (Saya memiliki Nexus 7).
Masalah
adalah bahwa aplikasi saya berkembang membutuhkan baik WIFI dan berkesinambungan scanning Bluetooth LE . Jadi mematikan WIFI tidak ada pilihan bagi saya.
Terlebih lagi yang saya sadari adalah bahwa pemindaian LE Bluetooth terus - menerus sebenarnya dapat mematikan koneksi WIFI dan membuat adaptor WIFI tidak dapat terhubung kembali ke jaringan WIFI apa pun hingga pemindaian BLE AKTIF. (Saya tidak yakin tentang jaringan seluler dan internet seluler).
Ini pasti terjadi pada perangkat berikut:
Namun pemindaian BLE dengan WIFI aktif tampak cukup stabil pada:
Solusi saya
Saya memindai BLE dalam waktu singkat 3-4 detik kemudian saya mematikan pemindaian selama 3-4 detik . Kemudian nyala lagi.
services
ataucharacteristics
gagal.sumber
Pastikan Nexus Anda dipasangkan dengan perangkat. Saya tidak dapat memverifikasi apakah komunikasi berfungsi dengan baik, tetapi Anda akan dapat terhubung lebih dari sekali tanpa reboot. Tampaknya koneksi pertama tidak memerlukan pemasangan tetapi semua upaya selanjutnya dilakukan.Saya akan memperbarui jawaban ini dalam beberapa hari ketika saya menguji penemuan layanan dan gatt membaca dan menulis permintaan tanpa reboot.
EDIT: Ternyata saya sedang menguji pada versi firmware pengembangan (sensor kami) yang menyebabkan masalah jika tidak dipasangkan. Pembuatan firmware produksi terbaru kami berfungsi dengan baik pada 2540-an dan 2541-an.
EDIT: Saya memang memperhatikan bahwa pada Nexus 7 2013, koneksi lebih stabil ketika WiFi dimatikan. Saya ingin tahu apakah ini membantu orang lain.
EDIT: Saya tampaknya sudah mundur dengan pasangan. Semuanya berfungsi dengan baik saat tidak dipasangkan. Setelah berpasangan, saya mengalami gejala yang sama persis seperti OP. Hanya belum diketahui apakah ini terkait dengan firmware kami atau API Android BLE. Hati-hati jika menguji ini karena setelah dipasangkan, Anda mungkin tidak dapat memutuskan hubungan karena bug yang dijelaskan dalam 3b dari posting ini .
sumber
Dalam beberapa model ada cacat: https://code.google.com/p/android/issues/detail?id=180440
Di sisi lain dalam kasus saya masalahnya adalah, bahwa koneksi saya tidak ditutup dengan benar pada metode onDestroy. Setelah penutupan yang benar, masalah bagi saya tidak ada, tidak masalah bahwa wifi dihidupkan atau dimatikan.
sumber
close
perlu?Saya menghadapi masalah yang sama. Perbaikan saya adalah
& menelepon dekat setelah terputus.
sumber