Bluetooth Classic Scan liefert keine Ergebnisse

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bluetooth Classic Scan liefert keine Ergebnisse

    Hallo,

    Ich versuche grade eine grundlegene Bluetooth infrastruktur zu bauen, aber die Official docs zum Classic scan scheinen nicht zu funktionieren.

    Spezifisch, liefert der Broadcast receiver beim BluetoothDevice.ACTION_FOUND keine neue Geräte, auch wenn welche in der Umgebung da sind und sind auch mit anderen Geräten Discovered.

    Unten ist mein code. Über irgendeine Hilfe würde ich mich freuen.

    Java-Quellcode: MainActivity.kt

    1. package com.example.ble
    2. import android.app.Activity
    3. import android.bluetooth.BluetoothAdapter
    4. import android.bluetooth.BluetoothDevice
    5. import android.content.BroadcastReceiver
    6. import android.content.Context
    7. import android.content.Intent
    8. import android.content.IntentFilter
    9. import androidx.appcompat.app.AppCompatActivity
    10. import android.os.Bundle
    11. import android.util.Log
    12. import android.widget.AdapterView
    13. import android.widget.ArrayAdapter
    14. import kotlinx.android.synthetic.main.activity_main.*
    15. import org.jetbrains.anko.toast
    16. class MainActivity : AppCompatActivity() {
    17. private var defaultAdapter: BluetoothAdapter? = null
    18. lateinit var pairedDevices: Set<BluetoothDevice>
    19. val REQUEST_ENABLE_BLUETOOTH = 1
    20. companion object {
    21. const val EXTRA_ADDRESS: String = "Device_address"
    22. }
    23. override fun onCreate(savedInstanceState: Bundle?) {
    24. super.onCreate(savedInstanceState)
    25. setContentView(R.layout.activity_main)
    26. defaultAdapter = BluetoothAdapter.getDefaultAdapter()
    27. if (defaultAdapter == null) {
    28. toast("Dieses Gerät verfügt über keine Bluetooth Adapter. Sie können diese App nicht benutzen")
    29. return
    30. }
    31. if (!defaultAdapter!!.isEnabled) {
    32. val enableBluetoothIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
    33. startActivityForResult(enableBluetoothIntent, REQUEST_ENABLE_BLUETOOTH)
    34. }
    35. searchButton.setOnClickListener { startDiscovery() }
    36. val filter = IntentFilter(BluetoothDevice.ACTION_FOUND)
    37. Log.i("receiver", "registering receiver")
    38. registerReceiver(receiver, filter)
    39. }
    40. private val receiver = object : BroadcastReceiver() {
    41. override fun onReceive(context: Context, intent: Intent) {
    42. toast("maybe i find new device who know")
    43. when (intent.action) {
    44. BluetoothDevice.ACTION_FOUND -> {
    45. // Discovery has found a device. Get the BluetoothDevice
    46. // object and its info from the Intent.
    47. val device: BluetoothDevice? =
    48. intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
    49. val deviceName = device?.name
    50. val deviceHardwareAddress = device?.address // MAC address
    51. Log.i("BLUETOOTH DEVICE", "NEW DEVICE CAUGHT $deviceName")
    52. toast("device $deviceName was found")
    53. }
    54. BluetoothAdapter.ACTION_DISCOVERY_FINISHED -> {
    55. context.unregisterReceiver(this)
    56. }
    57. }
    58. }
    59. }
    60. private fun startDiscovery() {
    61. if (defaultAdapter!!.isDiscovering) {
    62. toast("scan already in progress")
    63. } else {
    64. toast("starting discovery")
    65. defaultAdapter!!.startDiscovery();
    66. }
    67. }
    68. private fun pairedDeviceList() {
    69. pairedDevices = defaultAdapter!!.bondedDevices
    70. val list: ArrayList<BluetoothDevice> = ArrayList()
    71. if (!pairedDevices.isEmpty()) {
    72. for (device: BluetoothDevice in pairedDevices) {
    73. list.add(device)
    74. Log.i("device", "" + device)
    75. }
    76. } else {
    77. toast("keine verbundene Geräte gefunden.")
    78. }
    79. val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, list)
    80. select_device_list.adapter = adapter
    81. select_device_list.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, l ->
    82. val device: BluetoothDevice = list[position]
    83. val address: String = device.address
    84. val intent = Intent(this, ControlActivity::class.java)
    85. intent.putExtra(EXTRA_ADDRESS, address)
    86. startActivity(intent)
    87. }
    88. }
    89. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    90. super.onActivityResult(requestCode, resultCode, data)
    91. if (requestCode == REQUEST_ENABLE_BLUETOOTH) {
    92. if (resultCode == Activity.RESULT_OK) {
    93. if (defaultAdapter!!.isEnabled) {
    94. toast("Bluetooth wurde angemacht")
    95. } else {
    96. toast("Bluetooth wurde deaktiviert")
    97. }
    98. } else if (resultCode == Activity.RESULT_CANCELED) {
    99. toast("Bluetooth kann von System aus nicht aktiviert werden")
    100. }
    101. }
    102. }
    103. }
    Alles anzeigen
  • Hallo
    Als erstes hoffe ich das du ach die Permission im Manifest hast.

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />



    Frage was ist das für ein Gerät was du suchst verbinden möchtest?

    Ich hoffe es ist kein BLE Gerät.
    Denn die Methoden die du benutzt sind für Standart Geräte kein BLE.


    Auch wird die ACTION_DISCOVERY_FINISHED nicht im Receiver ankommen den die Setzt du gar nicht im Intent Filfer.



    Kotlin ist nicht ganz so mein ding deshalb kann ich nicht viel dazu sagen.


    PS. Wird denn der receive überhaupt mal aufgerufen? Mache da mal ein Log. Am Anfang damit du jeden Aufruf mitbekommt.
    Bei deinen toast bin ich mir auch nicht sicher ob der so geht. Du bist in einer callback Methode und da müsstest du im Java den context benutzen.
    Wie sieht denn überhaupt deine toast Funktion aus.
    Lasse den toast mal weg und benutze ein Log.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()