2012-03-30 4 views
2

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

Мой план состоял в том, чтобы инициировать подключение к другому Bluetooth-устройству, которое обеспечивает привязку через bluetooth.

После небольшого расследования это не выглядит выполнимым - похоже, что мне нужно было бы реализовать профиль самостоятельно, а также иметь доступ root для работы в сети и делать все в приложении.

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

Я что-то упустил - если система не выставляет метод для подключения Bluetooth-соединения на уровне системы, мне повезло?

ответ

2

Частный профиль уже присутствует в API: BluetoothPan

Bluetooth PAN (Personal Area Network) является правильное имя для идентификации привязывать через Bluetooth.

Этот частный класс позволяет подключиться и отключиться от устройства, отображающего профиль Bluetooth PAN, с помощью методов public boolean connect(BluetoothDevice device) и public boolean disconnect(BluetoothDevice device).

Ниже приведен пример фрагмент подключения к определенному устройству:

String sClassName = "android.bluetooth.BluetoothPan"; 

class BTPanServiceListener implements BluetoothProfile.ServiceListener { 

    private final Context context; 

    public BTPanServiceListener(final Context context) { 
     this.context = context; 
    } 

    @Override 
    public void onServiceConnected(final int profile, 
            final BluetoothProfile proxy) { 
     Log.e("MyApp", "BTPan proxy connected"); 
     BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice("AA:BB:CC:DD:EE:FF"); //e.g. this line gets the hardware address for the bluetooth device with MAC AA:BB:CC:DD:EE:FF. You can use any BluetoothDevice 
     try { 
      Method connectMethod = proxy.getClass().getDeclaredMethod("connect", BluetoothDevice.class); 
      if(!((Boolean) connectMethod.invoke(proxy, device))){ 
       Log.e("MyApp", "Unable to start connection"); 
      } 
     } catch (Exception e) { 
      Log.e("MyApp", "Unable to reflect android.bluetooth.BluetoothPan", e); 
     } 
    } 

    @Override 
    public void onServiceDisconnected(final int profile) { 
    } 
} 

try { 

    Class<?> classBluetoothPan = Class.forName(sClassName); 

    Constructor<?> ctor = classBluetoothPan.getDeclaredConstructor(Context.class, BluetoothProfile.ServiceListener.class); 
    ctor.setAccessible(true); 
    Object instance = ctor.newInstance(getApplicationContext(), new BTPanServiceListener(getApplicationContext())); 
} catch (Exception e) { 
    Log.e("MyApp", "Unable to reflect android.bluetooth.BluetoothPan", e); 
}