모바일 앱(안드로이드)
디버그 모드에서 가짜 Bluetooth 스캔 결과 시뮬레이션하기
Billcorea
2024. 9. 17. 15:14
반응형
디버그 모드에서 가짜 Bluetooth 스캔 결과 시뮬레이션하기
안드로이드 개발 중 Bluetooth 기능을 테스트할 때, 실제 장치가 없거나 테스트 환경을 조작하고 싶을 때가 있습니다. 이 글에서는 no.nordicsemi.android.support.v18.scanner.ScanCallback을 사용하여 디버그 모드에서 가짜 Bluetooth 스캔 결과를 시뮬레이션하는 방법을 소개합니다.
1. Mock 데이터 생성
먼저, ScanResult와 ScanRecord를 포함한 Mock 데이터를 생성합니다.
Kotlin
import no.nordicsemi.android.support.v18.scanner.ScanCallback
import no.nordicsemi.android.support.v18.scanner.ScanResult
import android.bluetooth.BluetoothDevice
import android.bluetooth.le.ScanRecord
import java.lang.reflect.Constructor
// Mock BluetoothDevice 생성
fun createMockBluetoothDevice(address: String, name: String): BluetoothDevice {
val constructor = BluetoothDevice::class.java.getDeclaredConstructor(String::class.java)
constructor.isAccessible = true
val device = constructor.newInstance(address)
val nameField = BluetoothDevice::class.java.getDeclaredField("mName")
nameField.isAccessible = true
nameField.set(device, name)
return device
}
// Mock ScanRecord 생성
fun createMockScanRecord(): ScanRecord? {
return try {
val constructor: Constructor<ScanRecord> = ScanRecord::class.java.getDeclaredConstructor(
ByteArray::class.java, // 광고 데이터
ByteArray::class.java, // 스캔 응답 데이터
List::class.java, // 서비스 UUIDs
Int::class.javaPrimitiveType, // 광고 플래그
Int::class.javaPrimitiveType, // TxPowerLevel
String::class.java, // Device Name
Int::class.javaPrimitiveType // Manufacturer Specific Data
)
constructor.isAccessible = true
constructor.newInstance(
byteArrayOf(0x02, 0x01, 0x06), // 광고 데이터
byteArrayOf(0x09, 0x09, 0x4D, 0x6F, 0x63, 0x6B, 0x20, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65), // 스캔 응답 데이터
listOf(), // 서비스 UUIDs
-1, // 광고 플래그
0, // TxPowerLevel
"Mock Device", // Device Name
0 // Manufacturer Specific Data
)
} catch (e: Exception) {
e.printStackTrace()
null
}
}
// Mock ScanResult 생성
fun createMockScanResult(): ScanResult {
val mockDevice = createMockBluetoothDevice("00:11:22:33:44:55", "Mock Device")
val mockScanRecord = createMockScanRecord()
return ScanResult(mockDevice, mockScanRecord, 0, System.nanoTime())
}
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.
2. ScanCallback 설정
이제 ScanCallback을 설정하고, Mock 데이터를 사용하여 콜백을 호출합니다.
Kotlin
val mockScanResult = createMockScanResult()
val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
super.onScanResult(callbackType, mockScanResult)
// 결과 처리
}
override fun onBatchScanResults(results: List<ScanResult>) {
super.onBatchScanResults(listOf(mockScanResult))
// 결과 처리
}
override fun onScanFailed(errorCode: Int) {
super.onScanFailed(errorCode)
// 오류 처리
}
}
// 디버그 모드에서 Mock 데이터로 콜백 호출
scanCallback.onScanResult(ScanSettings.CALLBACK_TYPE_ALL_MATCHES, mockScanResult)
AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.
이 코드를 사용하면 디버그 모드에서 no.nordicsemi.android.support.v18.scanner.ScanCallback을 가짜로 만들어 테스트할 수 있습니다. 이를 통해 실제 장치 없이도 Bluetooth 기능을 테스트하고 디버깅할 수 있습니다.
이 블로그 게시물이 도움이 되길 바랍니다! 추가로 궁금한 점이 있으면 언제든지 물어보세요. 😊
...
하지만 실제 코딩에서는 진척이 없습니다. 읽어 주셔서 감사합니다.
반응형