| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- 구현
- FCM
- BFS
- compose
- Android
- NextPermutaion
- ARRANGEMENT
- Alignment
- 알고리즘
- java
- broadcastAsUser
- JetpackCompose
- hidden-api
- memory leak
- 삽질로그
- 프로그래머스
- Inner Class
- programmers
- Today
- Total
undefined
[Android] 사용자와 Broadcast 본문
시스템 애플리케이션, 그리고 일반 애플리케이션에서 동일한 동작을 수행하려고 할 때 '사용자' 에 따라서 권한 문제가 발생할 수 있다.
오류 해결을 위해 찾아봤던 내용들을 잊어버릴 것 같아 정리해두기로 했다.
오류 내용 : ~ android.permission.INTERACT_ACROSS_USERS_FULL~이었던 것 같다
서비스에서 브로드캐스트를 sendBroadcastAsUser(intent, UserHandle.USER_ALL)로 보내고 있었다. 이때 권한을 가지고 있지 않은 애플리케이션이 이 브로드캐스트를 받으면서 때 앱이 죽는 문제가 발생했다.
용어
이 오류를 해결하기 위해서 먼저 헷갈렸던 용어에 대해서 정리를 해보았다.
시스템 사용자
- 시스템 프로세스와 서비스가 사용하는 사용자
로그인한 사용자와는 별개의 개념?이다.
- 시스템 프로세스와 서비스에 필요한 모든 권한을 가지고 있음.
- ID는 0. (로그인한 사용자는 1000이상)
- 시스템 프로세스와 서비스에 필요한 모든 권한을 가짐.
시스템
- Android os와 관련된 시스템 서비스가 사용하는 사용자.
시스템에는 시스템 프로세스, 서비스, 앱, 라이브러리 등이 포함됨.
- ID는 1000이상
- 시스템 서비스에 필요한 권한을 가짐.
- 안드로이드 운영체제의 부팅 제어.
- 시스템 장치와 하드웨어에 엑세스
로그인한 사용자
- 현재 로그인한 사용자. (멀티 유저 환경에서 각 사용자는 별도의 계정을 가지는데 그 중 하나의 계정으로 로그인한 사용자)
사용자의 특징
- 각 사용자는 고유한 환경과 권한을 가질 수 있다.
- 앱의 실행 권한을 제어
- 파일의 소유권을 제어
- 시스템 설정의 엑세스 제어
안드로이드의 사용자
안드로이드에서는 사용자의 유형을 구분하는데
- UserHandle.SYSTEM은 시스템 사용자를 나타내는 상수입니다. 이 상수의 값은 0입니다.
- UserHandle.CURRENT은 현재 로그인한 사용자를 나타내는 상수입니다. 이 상수의 값은 로그인한 사용자의 ID입니다.
- UserHandle.USER_TYPE_GUEST는 게스트 사용자를 나타내는 상수입니다. 이 상수의 값은 2입니다.
- UserHandle.USER_TYPE_RESTRICTED는 제한된 사용자를 나타내는 상수입니다. 이 상수의 값은 3입니다.
UserAll은 모든 사용자를 나타내며 상수값은 -1이다.
sendBroadcast와 sendBroadcastAsUser
- sendBroadcast는 현재 앱의 사용자에게 브로드캐스트를 날린다.
- sendBroadcastAsUser는 지정된 사용자에게 브로드캐스트를 날린다. -> 이 때 A라는 앱에 broadcastAsUser를 사용해 브로드캐스트를 보내려면 A앱은 지정된 사용자의 권한을 가지고 있어야 한다.
'안드로이드' 카테고리의 다른 글
| [Android] Compose의 Arrangement와 Alignment 비교하기 (0) | 2024.10.22 |
|---|---|
| [Android] hidden-api (0) | 2023.10.15 |