Мое приложение - использовать OBD-сканер (который предоставляет интерфейс Bluetooth) для получения данных автомобиля. Я хочу добавить одну функцию в это приложение - приложение должно открываться каждый раз, когда obd (уже сопряженный) автомобиля находится в диапазоне Bluetooth мобильного телефона.
Мои мысли о реализации этого - получить список сопряженных устройств в широковещательном приемнике, если какое-либо из парных устройств содержит подстроку obd (маленькую или заглавную), тогда приложение должно открыться само.
что я достиг:
всякий раз, когда любое мобильное устройство, которое содержит строку obd Sub, подключено к моему мобильному телефону, мое приложение само открывается. Процесс подключения выполняется вручную с помощью настроек устройства.
код внутри трансляции для вышеупомянутого результата:
public class BrodcastBlueTooth extends BroadcastReceiver {
public BrodcastBlueTooth() {
}
@Override
public void onReceive(Context context, Intent intent) {
String DeviceName=null;
String action = intent.getAction();
// Log.d("BroadcastActions", "Action "+action+"received");
int state;
BluetoothDevice bluetoothDevice;
switch(action)
{
case BluetoothDevice.ACTION_ACL_CONNECTED:
bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Toast.makeText(context, "Connected to "+bluetoothDevice.getName(), Toast.LENGTH_SHORT).show();
Log.d("BroadcastActions", "Connected to "+bluetoothDevice.getName());
DeviceName=bluetoothDevice.getName();
if (DeviceName.contains("OBD")){
Intent newIntent = new Intent();
newIntent.setClassName("com.quad14.obdnewtry", "com.quad14.obdnewtry.activity.MainActivity");
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(newIntent);
}else if(DeviceName.contains("obd")){
Intent newIntent = new Intent();
newIntent.setClassName("com.quad14.obdnewtry", "com.quad14.obdnewtry.activity.MainActivity");
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(newIntent);
}
break;
case BluetoothDevice.ACTION_ACL_DISCONNECTED:
bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// Toast.makeText(context, "Disconnected from "+bluetoothDevice.getName(),
// Toast.LENGTH_SHORT).show();
break;
}
Я объявляю свою трансляцию в манифесте, поэтому она всегда работает в фоновом режиме.
Я получил список сопряженных устройств по следующему коду:
public void PairedDevice(){
Set<BluetoothDevice> pairedDevices = BTAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
PaiedDevices.add(device.getName());
Log.e("DeviceName", String.valueOf(PaiedDevices));
PairDeviceFlag=true;
}
}
}
что мне делать с этого момента, чтобы получить желаемый результат. Любые другие способы также приветствуются.