Bluetooth начало обнаружения не дает результатов - PullRequest
0 голосов
/ 21 марта 2019

Это мое первое приложение в Android.Я очень плохо знаком с Android и Java.Я своего рода эксперт в iOS / ObjC, хотя.Я учусь на практике.Поэтому я сразу же приступил к созданию приложения для подключения к устройству Bluetooth.Первым шагом, конечно, является получение списка устройств Bluetooth, доступных в диапазоне.

Вот мой манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest...>

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

    <application ...

Вот мой код активности:

private BluetoothAdapter btAdapter;

    @Override
    public void onDestroy() {
        super.onDestroy();
       // Unregister broadcast listeners
        unregisterReceiver(mReceiver);
    }


    /*-------------  ON CREATE ------------------------------*/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btAdapter =  BluetoothAdapter.getDefaultAdapter();
        if (btAdapter == null) {
            System.out.println ("Bluetooth non support");
        } else {
            System.out.println ("Bluetooth initialized");
        }

        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        registerReceiver(mReceiver, filter);

        IntentFilter filterDevice = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(mReceiver, filterDevice);

        if (btAdapter.isEnabled()) {
            String mydeviceaddress = btAdapter.getAddress();
            String mydevicename = btAdapter.getName();

            String status = mydevicename + " : " + mydeviceaddress;
            System.out.println(status);
            System.out.println ("Start discover");
            btAdapter.startDiscovery();
        } else {
            System.out.println ("Not enabled");
            Intent enableBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBT, 1);
        }
    }


    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();

            if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
                final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
                        BluetoothAdapter.ERROR);
                switch (state) {
                    case BluetoothAdapter.STATE_OFF:
                        System.out.println("1");
                        break;
                    case BluetoothAdapter.STATE_TURNING_OFF:
                        System.out.println("2");
                        break;
                    case BluetoothAdapter.STATE_ON:
                        System.out.println("3");
                        // SCAN HERE
                        btAdapter.startDiscovery();
                        break;
                    case BluetoothAdapter.STATE_TURNING_ON:
                        System.out.println("4");
                        break;
                }
            }

            if (BluetoothDevice.ACTION_FOUND.equals(action))
            {
                // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                // Add the name and address to an array adapter to show in a ListView
                System.out.println(device.getName() + "\n" + device.getAddress());
            } else {
                System.out.println("What de fuq");
            }

        }
    };

Я включил Bluetooth на своем телефоне Android, а затем запустил приложение, которое показывает, что журнал:

Инициализированный Bluetooth Начать обнаружение

И это все.Другие журналы не распечатываются.Есть идеи почему?Мой код кажется идеальным idk.

EDIT: Снимок экрана модуля Bluetooth HC-05, обнаруживаемого Android.enter image description here

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Если ваше другое устройство представляет собой модуль Bluetooth, в вашем случае Arduino, верно?

Если это так, проверьте это руководство, описывающее соединение между устройством Android и модулем HC05. bthc-05 для Android учебник

Кроме того, на основе этого официального образца: Пример Google - Bluetooth-чат

В качестве альтернативы, вы также можете иметьследующий метод, который делает ваше устройство доступным для обнаружения.И установить его на два телефона.Тогда вы сможете обнаружить телефоны друг на друге, по крайней мере.

protected void makeDiscoverable(){
    // Make local device discoverable
    Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
    discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, DISCOVERABLE_DURATION);
    startActivityForResult(discoverableIntent, DISCOVERABLE_BT_REQUEST_CODE);
}

Может быть, это поможет!

1 голос
/ 21 марта 2019

Другие устройства могут не находиться в режиме обнаружения.Убедитесь, что они доступны для обнаружения.

...