Устройство сопряжения Bluetooth на объекте

90
9

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

Как я могу подключить устройство, которое отображается в списке, когда я нажимаю его в списке?

Если кто-то решит понизить, пожалуйста, оставьте комментарий, почему я был заблокирован. Заранее спасибо за любую помощь или прозрение! : D

Это моя деятельность:

private BluetoothAdapter BA;
private BluetoothDevice device;
private Set<BluetoothDevice>pairedDevices;
private ArrayList list;
private ArrayAdapter adapter;
private ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

BA = BluetoothAdapter.getDefaultAdapter();
lv = (ListView)findViewById(R.id.listViewPaired);

list = new ArrayList();

lv.setOnItemClickListener(this);
}

final BroadcastReceiver bReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)){
device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
adapter.add(device.getName() + "\n" + device.getAddress());
adapter.notifyDataSetChanged();
}
}
};

public void find(View v)
{
txtTitle.setText("SEARCHING NEW DEVICES");

adapter.clear();

if (BA.isDiscovering()) {
BA.cancelDiscovery();
}
else {
BA.startDiscovery();

registerReceiver(bReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));
}
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

String value = String.valueOf(list.get(position));

Toast.makeText(MainActivity.this, value , Toast.LENGTH_LONG).show();
}
}

спросил(а) 2017-10-22T01:04:00+03:00 2 года, 11 месяцев назад
1
Решение
57

Во-первых, вам нужен BroadcastReceiver, который будет выполнен после спаривания:

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

if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
final int prevState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR);

if (state == BluetoothDevice.BOND_BONDED && prevState == BluetoothDevice.BOND_BONDING) {
showToast("Paired");
} else if (state == BluetoothDevice.BOND_NONE && prevState == BluetoothDevice.BOND_BONDED){
showToast("Unpaired");
}
}
}
};

А в слушателе вы это делаете:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
BluetoothDevice device = listViewDetected.getItemAtPosition(position);
try {
Method method = device.getClass().getMethod("createBond", (Class[]) null);
method.invoke(device, (Object[]) null);
} catch (Exception e) {
e.printStackTrace();
}
}
});

ответил(а) 2017-10-22T01:13:00+03:00 2 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема