- 문제
1. 기기를 켜진 상태로 유지 ? CPU만 켜진 상태로 유지 ? 밝기만 바꾸기?
https://developer.android.com/training/scheduling/wakelock?hl=ko#wakeful
기기를 켜진 상태로 유지 | Android 개발자 | Android Developers
기기를 켜진 상태로 유지 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 배터리가 많이 소모되지 않도록 유휴 상태의 Android 기기는 빠르게 절전 모드로 전
developer.android.com
2. 잠긴화면에 대한 접근
- 문제해결
1 - 1.
우리의 솔루션은 태양열 발전기를 이용한 배터리 운영에 있기에 최대한 전력을 아끼기 위해 항상 스크린을 밝게 하면 안될 것 같았다.
첫번째로는 설정에 들어가 태블릿 자체의 배터리를 저전력모드를 항상 유지하려고 했는데
아이폰과 다르게 수치가 90퍼 이하로 떨어지지 않으면 사용할 수 없었다.
이후 두번째로 머릿 속으로는 센서를 통해 주변에 아무도 없으면 밝기가 0 이였다가 센서가 작동하면 10으로 바뀌는 그런 상상을 하고
검색에 나섰다.
다행히 태블릿에는 다양한 내장센서가 존재했고, 그것을 사용하기로 하고
밝기 조절은 wake lock을 사용해보기로 했다.
내장센서 메소드
int | TYPE_ACCELEROMETER | 1 | 가속도 감지, 외부의 충격량과 방향 감지 센서 |
int | TYPE_ALL | -1 | 모든 센서 |
int | TYPE_AMBIENT_TEMPERATURE | 13 | 주위 온도 감지 센서 |
int | TYPE_GAME_ROTATION_VECTOR | 15 | 보정되지 않은 회전 벡터 센서 |
int | TYPE_GEOMAGNETIC_ROTATION_VECTOR | 20 | 지자기 회전 벡터 |
int | TYPE_GRAVITY | 9 | 축의 방향과 중력 감지 |
int | TYPE_GYROSCOPE | 4 | 회전 정보 감지, 다양한 축의 회전각 감지 |
int | TYPE_LIGHT | 5 | 빛의 세기 감지 센서 |
int | TYPE_MAGNETIC_FIELD | 2 | 자기장 센서 |
int | TYPE_MOTION_DETECT | 30 | 움직임 감지 센서 |
int | TYPE_ORIENTATION | 3 | 방향각 감지 센서 |
int | TYPE_PRESSURE | 6 | 압력 센서 |
int | TYPE_PROXIMITY | 8 | 근접한 물체와의 거리 감지 센서 |
int | TYPE_RELATIVE_HUMIDITY | 12 | 상대 습도 센서 |
int | TYPE_ROTATION_VECTOR | 11 | 회전 벡터 센서 |
int | TYPE_SIGNIFICANT_MOTION | 17 | 중요한 모션 트리거 센서 |
int | TYPE_STEP_COUNTER | 19 | 발걸음 횟수 센서 |
int | TYPE_STEP_DETECTOR | 18 | 발걸음 감지 센서 |
int | TYPE_TEMPERATURE | 7 | 온도 감지. API level 14에서 사용 |
센서 관련 코드
class MainActivity : AppCompatActivity(), SensorEventListener { //제일 중요한 센서이벤트리스너등록
//센서 관련 정의
private lateinit var sensorManager: SensorManager
private var proximitySensor: Sensor? = null
override fun onCreate(savedInstanceState: Bundle?) {
// 센서 매니저 초기화
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)
// 근접 센서 리스너 등록
if (proximitySensor != null) {
sensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL)
}
//센서를 이용한 조건문 사용
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_PROXIMITY) {
val distance = event.values[0]
override fun onResume() {
super.onResume()
// 근접 센서 리스너 등록
if (proximitySensor != null) {
sensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL)
}
}
override fun onPause() {
super.onPause()
// 근접 센서 리스너 해제
sensorManager.unregisterListener(this)
// 핸들러 메시지와 콜백 제거
handler.removeCallbacksAndMessages(null)
}
2 - 1
문제는 여기서 발생했는데 잠금화면이 되어버리면 굉장히 까다로운 접근이 필요했다. 아직은 내가 해결할 수 없다고 판단이 들어
다른 방법을 찾았다. 처음에 생각했 던 가장 기본으로 돌아가 밝기조절만 하는 것이다. 그래도 많이 줄일 수 있으니까...
(그리고 배터리에 안좋다고 하니까..ㅎㅎ)
wake lock에서 찾았던 공식문서에 있는
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
를 사용하여 항상 켜져있지만 밝기 조절을 할 수 있게 했다.
센서 조건문 함수에 조건에 맞게 밝기 조절 함수를 추가로 넣으면 끝! ( 3일 넘게 걸림 ) 미래의 사수님 보고싶습니다.
그 외
근접센서의 거리는 대략 50cm로 생각보다 길었고 사실 이게 통화할 때 사용된다고 한다.
다양한 내장센서를 활용한 것들도 해보고 싶지만 프로젝트가 우선이니까 ^^
'Project > APP' 카테고리의 다른 글
Kotlin으로 Yolo V8 사용하기 (0) | 2024.06.25 |
---|---|
Kotlin TTS(Text To Speach) (0) | 2024.03.30 |
시리얼 명령 class / 시리얼 명령 동적화 (0) | 2023.11.15 |
Kotlin으로 메인보드 컨트롤 (2) | 2023.11.14 |
kotlin으로 s3 버킷에 이미지 올리기(awscognito) (0) | 2023.11.13 |