Android API bluetooth

Тема в разделе "Проводная и беспроводная связь", создана пользователем БАРМАТОГРАФ, 9 янв 2018.

  1. Помогите если можете)) Написал простенький блютуз терминал для телефона, введеное число отправляет на блютуз модуль. Проблема в том, что мак адрес модуля записывается в строковую переменную. В java я не особо силен) Необходимо чтобы приложение само запрашивало с модуля мак адрес и потом его использовало. То есть я в настройках подключился, сопряжение прошло. Захожу в приложение и оно считывает с блютуз модуля его мак адрес. Проблема что не могу найти метод и пример его использования. Если напишете пример, буду благодарен)
     
  2. DIYMan

    DIYMan Гуру

  3. DIYMan

    DIYMan Гуру

    Цитата из ссылки, что я приводил выше, там из кода ВСЁ понятно:
    Код (C++):
    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();

    if (pairedDevices.size() > 0) {
        // There are paired devices. Get the name and address of each paired device.
        for (BluetoothDevice device : pairedDevices) {
            String deviceName = device.getName();
            String deviceHardwareAddress = device.getAddress(); // MAC address
        }
    }
    Видно, что возвращает MAC-адрес СПАРЕННОГО устройства. Читайте доку внимательнее, плз.
     
  4. Да?) Спасибо, замечание учту. Сейчас попытаюсь засунуть это в свой терминал. Если что вернусь сюда)
     
  5. Почему-то приложение теперь закрывается с ошибкой.
    До этого такого не было
     
  6. Если можно, посмотрите пожалуйста исходный код, я похоже накосячил где-то
    Код (Java):
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.bluetooth.BluetoothSocket;
    import android.bluetooth.BluetoothAdapter;
    import android.bluetooth.BluetoothDevice;

    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import android.widget.Toast;
    import java.io.OutputStream;
    import java.util.Set;

    public class MainActivity extends AppCompatActivity {

        BluetoothSocket clientSocket;
        private static final int REQUEST_ENABLE_BT = 1;
        public String adress;
        public String name = "HC-06";
        public String myadress;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
            if (bluetooth.isEnabled()){

            }else
            {
                Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

            }
            Set<BluetoothDevice> pairedDevices = bluetooth.getBondedDevices();
            if (pairedDevices.size() > 0) {
                // There are paired devices. Get the name and address of each paired device.
                for (BluetoothDevice device : pairedDevices) {
                    String deviceName = device.getName();
                    String deviceHardwareAddress = device.getAddress(); // MAC address
                    if(deviceName == name){
                        myadress = deviceHardwareAddress;
                    }
                }
            }
            BluetoothDevice device = bluetooth.getRemoteDevice(myadress);
            Method m = null;
            try {
                m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            try {
                if (m != null) {
                    clientSocket = (BluetoothSocket) m.invoke(device, 1);
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            try {
                clientSocket.connect();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        public void onButtonClick (View view) {
            EditText num = (EditText)findViewById(R.id.editText);
            int value = Integer.parseInt(num.getText().toString());
            OutputStream outStream = null;
            try {
                outStream = clientSocket.getOutputStream();
                Toast.makeText(getApplicationContext(), "Подключение успешно", Toast.LENGTH_LONG).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (outStream != null) {
                    outStream.write(value);
                }
                Toast.makeText(getApplicationContext(), "Данные успешно переданы", Toast.LENGTH_LONG).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
     
  7. DIYMan

    DIYMan Гуру

  8. Да, из-за разрешений такое может быть. Но здесь прописано вроде все что нужно. Вот и не пойму почему)
    Сейчас почитаю то что Вы кинули
     
  9. Все 4 разрешения связанные с блютуз добавлены. Все равно ошибка ;(
     
  10. DIYMan

    DIYMan Гуру

    Тут уже ничего не посоветую, кроме того, чтобы взять примеры работы с BT из официальной доки и попробовать с ними, начиная от простого к сложному ;)
     
  11. Так и думаю сделать))
    Опять с нуля терминал писать)
     
  12. Такая фигня. Все работает, пока не вызывается считывание мак адресов. Ошибка, приложение закрывается. Потом уже войти не получается, ошибки. Что это????
     
  13. DIYMan

    DIYMan Гуру

    Думаю, тут вам никто не ответит ;) Возможно, дело в версиях андроида, смотрите доку к API, на каких версиях оно работает, проверяйте свою версию андроида ;)
     
  14. Api 21 выбирал когда создавал проект, блютуз на 18 самые последние функции добавили.
    На телефоне даже ошибки не пишет, просто вырубается. На планшете пишет ошибка. На планшете 4 андроид, на телефоне 5
     
  15. DIYMan

    DIYMan Гуру

    То, что вы выбирали версию API, когда создавали проект - это понятно. Но версия ОС Андроид, установленная на телефоне и планшете, должна быть с поддержкой этой версии API, смекаете? ;) На примере: вы пытаетесь накачать на машине колесо, которого нет.
     
  16. Смекаю, Вы хотите сказать 5 андроид не поддерживает API какого-то 3.8?
     
  17. DIYMan

    DIYMan Гуру

    Я хочу сказать, что надо смотреть, что написано в доке ;) Я - не знаю, что там чего поддерживает, но лично я первым делом проверил бы именно соответствие версии ОС той версии API, которая используется в проекте. Просто жизненный опыт.
     
  18. В проекте используется версия API которая меньше API установленной ОС. А следующие версии API поддерживают все из предыдущих. Где мне взять устройство со старой версией
    Но я сейчас попробую с API пониже пересобрать :)
     
  19. DIYMan

    DIYMan Гуру

    Как я говорил выше - могу строить только предположения ;) Ваш выход - читать тематические форумы по этому вопросу, к коим форум Амперки не относится, имхо.

    З.Ы. Всё никак не доползу до андроида, времени не хватает. Так, собрал тестовый проектик, да забросил.