Мы пытаемся использовать класс CompanionDeviceManager для сопряжения нашего устройства BLE с телефоном Android (версия 10) без необходимости разрешения местоположения.
В целях тестирования мы активировали Bluetooth на нескольких телефонах и других устройствах наше тестовое устройство.
Мы безуспешно используем пример кода с официального сайта
Добавлены эти коды в файл AndroidManifest:
<uses-feature android:name="android.hardware.bluetooth"/>
<uses-feature android:name="android.software.companion_device_setup"/>
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
Полный код MainActivity:
public class MainActivity extends AppCompatActivity {
private CompanionDeviceManager deviceManager;
private AssociationRequest pairingRequest;
private BluetoothDeviceFilter deviceFilter;
private static final int SELECT_DEVICE_REQUEST_CODE = 42;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("ArkSigner", "onCreate called.");
deviceManager = getSystemService(CompanionDeviceManager.class);
// To skip filtering based on name and supported feature flags (UUIDs),
// don't include calls to setNamePattern() and addServiceUuid(),
// respectively. This example uses Bluetooth.
deviceFilter = new BluetoothDeviceFilter.Builder()
//.setNamePattern(Pattern.compile("Test"))
//.addServiceUuid(new ParcelUuid(new UUID(0x123abcL, -1L)), null)
.build();
// The argument provided in setSingleDevice() determines whether a single
// device name or a list of device names is presented to the user as
// pairing options.
pairingRequest = new AssociationRequest.Builder()
.addDeviceFilter(deviceFilter)
//.setSingleDevice(true)
.build();
List<String> associations = deviceManager.getAssociations();
// When the app tries to pair with the Bluetooth device, show the
// appropriate pairing request dialog to the user.
deviceManager.associate(pairingRequest,
new CompanionDeviceManager.Callback() {
@Override
public void onDeviceFound(IntentSender chooserLauncher) {
try {
Log.e("ArkSigner", "onDeviceFound called.");
startIntentSenderForResult(chooserLauncher,
SELECT_DEVICE_REQUEST_CODE, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(CharSequence error) {
Log.e("ArkSigner", "onFailure called.");
}
},
null);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("ArkSigner", "onActivityResult called.");
if (requestCode == SELECT_DEVICE_REQUEST_CODE &&
resultCode == Activity.RESULT_OK) {
// User has chosen to pair with the Bluetooth device.
BluetoothDevice deviceToPair =
data.getParcelableExtra(CompanionDeviceManager.EXTRA_DEVICE);
deviceToPair.createBond();
// ... Continue interacting with the paired device.
}
}
}
После того, как мы запустим наше приложение Android, мы не видим никаких диалоговых окон об обнаруженных устройствах (устройства Bluetooth или BLE)
Изменить: если мы дадим имя устройства в строке ".setNamePattern (Pattern.compile (" Test "))" или используйте ".setSingleDevice (true)", это ничего не меняет.