2013-06-18 6 views
30

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

Я нашел следующий код Я уверен, что он работает, но не уверен, как добавить PIN-код в этот код ??

private void pairDevice(BluetoothDevice device) { 
     try { 
      Log.d("pairDevice()", "Start Pairing..."); 
      Method m = device.getClass().getMethod("createBond", (Class[]) null); 
      m.invoke(device, (Object[]) null); 
      Log.d("pairDevice()", "Pairing finished."); 
     } catch (Exception e) { 
      Log.e("pairDevice()", e.getMessage()); 
     } 
    } 

Кто-нибудь знает, как ввести PIN-код в коде выше или любого аналогичного кода для решения проблемы .. Спасибо

+0

Возможно, это поможет вам. http://stackoverflow.com/questions/5885438/bluetooth-pairing-without-user-confirmation Приветствия, –

+0

@ManolescuSebastian - Я хочу, чтобы создать безопасное соединение ... –

+0

Попробуйте мой ответ. Я надеюсь, что это сработает для вас. –

ответ

3

Попробуйте этот код:

public void pairDevice(BluetoothDevice device) 
{ 
    String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST"; 
    Intent intent = new Intent(ACTION_PAIRING_REQUEST); 
    String EXTRA_DEVICE = "android.bluetooth.device.extra.DEVICE"; 
    intent.putExtra(EXTRA_DEVICE, device); 
    String EXTRA_PAIRING_VARIANT = "android.bluetooth.device.extra.PAIRING_VARIANT"; 
    int PAIRING_VARIANT_PIN = 0; 
    intent.putExtra(EXTRA_PAIRING_VARIANT, PAIRING_VARIANT_PIN); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent); 
} 

Intent intent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST); 
intent.putExtra(EXTRA_DEVICE, device); 
int PAIRING_VARIANT_PIN = 272; 
intent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, PAIRING_VARIANT_PIN); 
sendBroadcast(intent); 

Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS); 
startActivityForResult(intent, REQUEST_PAIR_DEVICE); 

Я надеюсь, что это помогает

Ссылка: http://pastebin.com/N8dR4Aa1

+0

Пожалуйста, помогите мне .. ... Я хочу список устройств с включенным BT и после нажатия на конкретное устройство bluetooth, оно сопряжено с нашим устройством. –

+2

. Я получаю первый метод, но что вы предлагаете нам делать с двумя другими блоками кода? – gregm

1

Попробуйте это,

BluetoothDevice device = intent.getParcelableExtra("android.bluetooth.device.extra.DEVICE"); 
device.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(device, true); 
device.getClass().getMethod("cancelPairingUserInput", boolean.class).invoke(device); 
8

Итак, у меня был этот вопрос, если кому-то нужно ответ на это работает в android 4.4.2.

IntentFilter filter = new IntentFilter(
       "android.bluetooth.device.action.PAIRING_REQUEST"); 


     /* 
     * Registering a new BTBroadcast receiver from the Main Activity context 
     * with pairing request event 
     */ 
     registerReceiver(
       new PairingRequest(), filter); 

И код для получателя.

public static class PairingRequest extends BroadcastReceiver { 
     public PairingRequest() { 
      super(); 
     } 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals("android.bluetooth.device.action.PAIRING_REQUEST")) { 
       try { 
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
        int pin=intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY", 0); 
        //the pin in case you need to accept for an specific pin 
        Log.d("PIN", " " + intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY",0)); 
        //maybe you look for a name or address 
        Log.d("Bonded", device.getName()); 
        byte[] pinBytes; 
        pinBytes = (""+pin).getBytes("UTF-8"); 
        device.setPin(pinBytes); 
        //setPairing confirmation if neeeded 
        device.setPairingConfirmation(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

И в файле манифеста.

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

И широковещательная радиостанция.

<receiver android:name=".MainActivity$PairingRequest"> 
       <intent-filter> 
        <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> 
        <action android:name="android.bluetooth.device.action.PAIRING_CANCEL" /> 
       </intent-filter> 
</receiver> 
1
BluetoothSocket bluetoothSocket = null; 
    try { 
     bluetoothSocket = device.createRfcommSocketToServiceRecord(UUID.fromString(UUID_DIVING)); 
    } catch (IOException e) { 
     Log.i("Bluetooth", "IOException = " + e.getMessage()); 
     e.printStackTrace(); 
    } 

    try { 
     byte[] pin = (byte[]) BluetoothDevice.class.getMethod("convertPinToBytes", String.class).invoke(BluetoothDevice.class, "0000"); 
     Method m = device.getClass().getMethod("setPin", byte[].class); 
     m.invoke(device, (Object) pin); 
     device.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(device, true); 
    } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { 
     Log.i("Bluetooth", "IOException = " + e.getMessage()); 
     e.printStackTrace(); 
    } 

    try { 
     if (bluetoothSocket != null) { 
      bluetoothSocket.connect(); 
      Log.i("Bluetooth", "bluetoothSocket.connect() "); 
      InputStream inputStream = bluetoothSocket.getInputStream(); 
      OutputStream outputStream = bluetoothSocket.getOutputStream(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
0

Как установить пин-код был дан ответ выше (и это помогло мне). Тем не менее, я разделяю мой простой код, ниже которого работает с Android 6:

BluetoothAdapter mBTA = BluetoothAdapter.getDefaultAdapter(); 
if (mBTA.isDiscovering()) mBTA.cancelDiscovery(); 
mBTA.startDiscovery(); 
... 

/** In a broadcast receiver: */ 

if (BluetoothDevice.ACTION_FOUND.equals(action)) { // One device found. 

    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
    Log.d(TAG, "Start Pairing... with: " + device.getName()); 
    device.createBond(); 
} 

// If you want to auto-input the pin#: 
else if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action)){ 

        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
        device.setPin("1234".getBytes()); 
} 
Смежные вопросы