pairWithQr static method
Future<AdbPairingResult>
pairWithQr(
- AdbQrPairingData qr,
- AdbCrypto crypto, {
- Duration discoveryTimeout = const Duration(seconds: 30),
- Duration pairingTimeout = const Duration(seconds: 30),
- bool verbose = false,
Pair with an Android device using the Android Studio style QR flow.
Implementation
static Future<AdbPairingResult> pairWithQr(
AdbQrPairingData qr,
AdbCrypto crypto, {
Duration discoveryTimeout = const Duration(seconds: 30),
Duration pairingTimeout = const Duration(seconds: 30),
bool verbose = false,
}) async {
final discovery = AdbMdnsServiceDiscovery();
final pairingService = await discovery.resolvePairingService(
qr.serviceName,
timeout: discoveryTimeout,
);
if (pairingService == null) {
if (verbose) {
print('Timed out waiting for QR pairing service ${qr.serviceName}');
}
return const AdbPairingResult(
success: false,
errorMessage: 'Timed out waiting for the requested QR pairing service',
);
}
final pairingEndpoint = _endpointFromDiscoveredService(pairingService);
final pairResult = await _pairAtEndpoint(
pairingService.preferredHost,
pairingService.port,
qr.password,
crypto,
verbose: verbose,
pairingEndpoint: pairingEndpoint,
).timeout(
pairingTimeout,
onTimeout: () => AdbPairingResult(
success: false,
pairingEndpoint: pairingEndpoint,
errorMessage: 'Pairing timed out',
),
);
if (!pairResult.success) {
return pairResult;
}
final connectService = await discovery.resolveConnectService(
deviceGuid: pairResult.deviceGuid,
preferredAddress: pairingService.preferredAddress,
timeout: discoveryTimeout,
);
return pairResult.copyWith(
connectEndpoint: connectService == null
? null
: _endpointFromDiscoveredService(connectService),
);
}