2016-03-14 2 views
0

У меня есть функция, которая подключается к устройству (кредитная карта машины Bluetooth в данном случае), который выглядит следующим образом:Отключение устройства Bluetooth

private void pinPar(final String name, final String address) { 
    MainActivity.this.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      pinpadSelected = new PinpadObject(name, address, false); 
      BluetoothConnectionProvider bluetoothConnectionProvider = new BluetoothConnectionProvider(MainActivity.this, pinpadSelected); 
      bluetoothConnectionProvider.setDialogMessage("Connecting to pinpad"); 
      bluetoothConnectionProvider.setWorkInBackground(false); 
      bluetoothConnectionProvider.setConnectionCallback(new StoneCallbackInterface() { 
                    @Override 
                    public void onSuccess() { 

                     Toast.makeText(getApplicationContext(), "Pinpad connected", Toast.LENGTH_SHORT).show(); 
                     out.println("Connected to " + name + " at " + address); 

                    } 

                    @Override 
                    public void onError() { 
                     Toast.makeText(getApplicationContext(), "Connection failed", Toast.LENGTH_SHORT).show(); 
                     out.println("Failed connecting to "+ name + " at " + address); 
                    } 
                   } 

      ); 
      bluetoothConnectionProvider.execute(); 
     } 
    }); 
} 

Я искал, чтобы сделать аналогичную функцию, pinUnpar что просто закроет это соединение, но bluetoothConnectionProvider не имеет метода close() или что-то в этом роде. Как я могу это достичь?

+0

Mate, Является BluetoothConnectionProvider в библиотеке вы импортировали? Потому что на всю жизнь я не могу найти это в документации по API Android. – gedo

+0

@gedo Это объясняет боль, с которой я столкнулся с этим. Я думал, что это часть API Android, но на самом деле это часть [этого SDK] (https://github.com/stone-pagamentos/sdk-android-V2). –

+0

Предоставленный Bluetooth API намного лучше, чем тот SDK вы используете imo (я посмотрел на него), гораздо проще создать соединение, используя его, и управлять им. – gedo

ответ

1

Alrighty, я не занимался Bluetooth на андроиде, но здесь. Существует много разных способов подключения устройств, использующих bluetooth, но один простой способ, который мне особенно нравится, поскольку он не требует сканирования для устройства, к которому вы хотите подключиться, и не требует сопряжения. Это выглядит следующим образом:

Прежде всего вам нужен общий UUID, который знают как ваш клиент, так и сервер, так как ваш сервер в этом случае является кредитной карточкой Bluetooth, вам нужно узнать, что использует UUID для подключения (Не должно быть слишком сложно, если оно не написано в руководстве к машине, то вы можете обнаружить его самостоятельно с помощью ноутбука).

код клиента: -

BluetoothAdapter adapter; 
adapter= BluetoothAdapter.getDefaultAdapter(); 
BluetoothDevice device; 
device= adapter.getRemoteDevice(serverAddress); //address here would be the address value 
//passed to your function 
BluetoothSocket socket= device.createInsecureRfcommSocketToServiceRecord(uuid); 
//here uuid is the UUID the device uses as mentioned perviously 
socket.connect(); 
OutputStream ouput=socket.getOutputStream(); 
InputStream input=socket.getInputStream(); 

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

Поскольку этот код использует простые потоки и сокеты, его очень легко закрыть, так же как его легко открыть.

Edit: -

Это использует андроид API только для подключения BT, и обратите внимание, что этот код использует небезопасный RFCOMM, что означает, что уязвима для MITMA и других подобных атак. Если вы не хотите, что вы можете вместо этого заменить

device.createInsecureRfcommSocketToServiceRecord(uuid) 

с

device.createRfcommSocketToServiceRecord(uuid); 
Смежные вопросы