일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- compse collectAsState
- 모의위치 주입
- 1회용 플라스틱컵
- 안드로이드 스튜디오 애뮬레이터
- 스레드 #코루틴
- withContext
- var 와 val
- #큐구조 #큐다운로드
- TowmonUSB 연결오류
- 플라스틱 생분해
- apk이름변경
- json 저장
- compse state
- 토글 험수
- viewmodelscope
- 안드로이드 sms
- Room 데이터베이스 업데이트
- 커스텀스피너
- 안드로이드 mvvm
- 라이브데이터 postValue
- 코틀린 트리거 버튼
- 셀룰로오스-g-폴리락타이드 공중합체
- 안드로이드 비콘
- 안드로이드스튜디오 jdk
- bluetoothmanager
- 코루틴 job
- TwomonUSB
- 비콘스캐닝
- 코틀린 이미지저장 #파일저장
- 1회용컵
- Today
- Total
목록분류 전체보기 (52)
EnjoyLife
Spinner 자체가 강제적으로 dropdown 을 닫는 기능을 고려해서 만들지 않았다. 기본적으로 스피너의 아이템 클릭하면 바로 dropdown 이 닫히기때문이다. 그래도 억지로 커스텀 스피너를 만들어 버튼을 이용해 dropdown을 닫고자 한다면 이 방법이 가장 간단하다 binding.btnAction.setOnClickListener { val parentView = parent as? AdapterView parentView?.performItemClick(binding.root, position, getItemId(position)) }
결론: 안드로이드 14에서 LocationManager 의 removeTestProvider,setTestProviderEnabled 함수를 사용못하게 막아놨기 때문에 사용불가하다.사용해도 "java.lang.IllegalArgumentException: gps provider is not a test provider" 오류가 발생한다.FusedLocationProviderClient 의 fusedClient.setMockMode(false) 호출만으로도 충분히 모의위치 주입 해제가 된다. 구글지도앱을 실행해도 실제 위치로 이동한것을 볼수 있다. // 100% 오류 발생 addedProviders.forEach { provider -> try { loc..
fun isServiceRunning(serviceClass: Class): Boolean { val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as? android.app.ActivityManager ?: return false return try { activityManager.getRunningServices(Int.MAX_VALUE) .any { it.service.className == serviceClass.name } } catch (e: Exception) { false } }
✅ 백그라운드 최적화 핵심 체크리스트Foreground Service 필수: - 항상 startForeground() 호출, 알림 고정 - 절대 일반 Service로 실행하지 말 것서비스 분리: - “계속 살아 있어야 하는 비콘 감지(BeaconService)”는 Foreground - “일회성 작업(모의위치 주입)”은 짧게 실행 후 stopSelf()로 종료메모리 릭/과다 WakeUp 방지: - CoroutineScope(Dispatchers.Default)로 주기 작업 - 주기 체크(예: 2초) 외 불필요한 Timer, Handler, Alarm 사용 XDoze 모드/절전 예외 적용: - Foreground Service는 일반 절전 모드에서 살아남지만, - Doze 모드 심화(충전+화면 꺼짐)에서는..
신규 Android 앱을 만들 때는 JDK 17을 사용하는 것을 권장드립니다. 그 이유를 정리해 보면 다음과 같습니다.LTS(장기 지원) 안정성JDK 17은 2021년 9월에 나온 LTS 버전으로, 버그 픽스·보안 업데이트가 최소 2029년까지 지원됩니다.JDK 21 역시 LTS이지만 출시(2023년 9월)가 비교적 최근이라, Android 생태계 전반에서 아직 검증·호환성 테스트가 충분히 이뤄지지 않았습니다.Android Gradle Plugin(AGP) 호환성현 시점(2025년 기준) Android Studio·AGP 공식 문서 상으로는 JDK 17까지 안정적으로 지원됩니다.JDK 21을 쓰려면 Gradle 8.5 이상, AGP 8.5 이상으로 모두 업그레이드해야 하는데, 일부 서드파티 플러그인이나 ..
1.모의위치 주입 Android에서 모의 위치 API는 주로 LocationManager를 사용하여 테스트 목적으로 가짜 GPS 위치를 주입하는 데 사용됩니다. 이를 통해 개발자는 앱의 위치 기반 기능을 테스트할 수 있습니다. 주요 개념과 사용 방법은 다음과 같습니다:1. 모의 위치 제공자 추가 addTestProvider 메서드를 사용하여 모의 위치 제공자를 추가합니다. 이 제공자는 GPS, 네트워크 등과 같은 실제 위치 제공자를 모방합니다. private lateinit var locationManager: LocationManagerlocationManager.addTestProvider( LocationManager.GPS_PROVIDER, // GPS 제공자 false, fal..

결론은 불가능하다. 구글정책에 의해 (아래 링크 참고) 기본SMS앱에 사용자가 등록한 앱이 아니면 브로드캐스트리시버로 문자를 읽을때 필요한 권한인 READ_SMS, RECEIVE_SMS, SEND_SMS 이 권한 자체를 사용할수 없다. 본인이 직접 SMS앱을 만들어서 사용자가 그 앱을 기본SMS앱으로 등록시켜서 사용하게 하면 된다.그러면 단말기에서 온 SMS문자를 다 읽을수 있다. 링크를 들어가 정책내용을 보면 아래 부분에 명확하게 명시해 줬다. " 그 권한과 관련된 핵심 기기 기능을 위한 사용자의 기본 핸들러로 등록되어야 합니다. 예를 들어 통화 관련 권한에 액세스하려면 앱이 예외 사례를 충족하지 않는 한, 앱을 사용자의 기본 휴대전화 핸들러 또는 어시스턴트 핸들러로 등록해야 합니다." " 앱은 ..
비콘(Beacon) 스캔 기능을 Android에서 직접 구현할 때 기본이 되는 주요 BLE(Bluetooth Low Energy) API는 다음과 같습니다:BluetoothManager & BluetoothAdapterBluetoothManager를 통해 시스템 블루투스 서비스(BLUETOOTH_SERVICE)를 얻고,BluetoothAdapter로 디바이스의 블루투스 상태(on/off) 확인 및 BLE 스캐너 객체를 가져옵니다.kotlin복사편집val btManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager val btAdapter = btManager.adapter BluetoothLeScannerBluetoothAdapt..