반응형
Intent
- 컴포넌트에 액션, 데이터 등을 전달하는 메시지 객체
- A 컴포넌트에서 B 컴포넌트를 실행
- Intent에 정보를 담아 시스템에 의뢰하고, 시스템에서 B 컴포넌트를 실행
Intent 객체의 구성 요소
Action (액션)
- 수행할 액션 이름
- e.g. ACTION_DIAL
Data (데이터)
- 수행할 데이터의 URI
- e.g. tel:
Category (카테고리)
- 수행할 액션에 대한 추가적인 정보
Type (타입)
- 수행할 인텐트 데이터의 명시적인 타입
- e.g. MIME 타입, video/mpeg
Component name (컴포넌트 이름)
- 대상 컴포넌트의 완전한 클래스 이름
Extras (추가 정보)
- 인텐트를 다루는 컴포넌트에 추가적으로 전달할 한 쌍의 키/값
Activity Action (액티비티 액션)
- 안드로이드에서 제공되는 기본 애플리케이션 중 다른 애플리케이션이 사용할 수 있도록 Activity가 제공
ACTION_MAIN
- 시작 액티비티를 지정하기 위한 액션
ACTION_VIEW
- 데이터의 URL로 가장 적절한 액티비티를 호출하는 액션
- content://
- geo:lon,lat
ACTION_DEFAULT
- ACTION_VIEW와 동일
ACTION_EDIT
- 수정하기 위해 호출하는 액션
ACTION_DELETE
- 삭제하기 위해 호출하는 액션
ACTION_DIAL
- 전화 다이얼 액티비티를 호출하는 액션
- tel:0101235678
ACTION_CALL
- 전화 액티비티를 호출하는 액션
- tel:0101235678
ACTION_WEB_SEARCH
- 웹 검색 액티비티를 호출하는 액션
ACTION_SEARCH
- 검색 액티비티를 호출하는 액션
ACTION_SENDTO
- 이메일 등의 메시지 전송을 지정하는 액션
ACTION_ANSWER
- 전화 착신을 위한 액션
ACTION_APPLICATION_SETTINGS
- 어플리케이션 설정 창으로 이동
ACTION_APPLICATION_DETAILS_SETTINGS
- 특정 어플리케이션 설정 창으로 이동
- package:패키지명
ACTION_APPLICATION_DEVELOPMENT_SETTINGS
- 개발자 옵션 설정창으로 이동
- 만약 개발자 옵션이 활성화되지 않은 경우 토스메세지 출력
ACTION_APP_NOTIFICATION_SETTINGS
- 특정 앱의 알림(Notification) 정보 액티비티
ACTION_APP_NOTIFICATION_BUBBLE_SETTINGS
- 특정 앱의 플로팅 알림(Notification) 정보 액티비티
ACTION_APP_SEARCH_SETTINGS
- 설정 검색 액티비티로 이동하는 액션
ACTION_APP_USAGE_SETTINGS
- 특정 앱 사용한 정보로 이동
Intent Action을 이용한 가상 위치 정보 확인
class MainActivity : ComponentActivity() {
//...
override fun onCreate(savedInstanceState: Bundle?) {
//...
if (checkMockLocation()) {
// 가상 위치 정보 허용
} else {
// 개발자 설정 창으로 이동
Log.d("checkMockLocation", "checkMockLocation is false")
startActivity(Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS))
}
//...
}
private fun checkMockLocation(): Boolean = (applicationContext.getSystemService(Context.APP_OPS_SERVICE) as? AppOpsManager)
?.let { appOpsManager ->
kotlin.runCatching {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
appOpsManager.unsafeCheckOp(
AppOpsManager.OPSTR_MOCK_LOCATION,
android.os.Process.myUid(),
BuildConfig.APPLICATION_ID
) == AppOpsManager.MODE_ALLOWED
} else {
android.provider.Settings.Secure.getString(applicationContext.contentResolver, "mock_location") != "0"
}
}.getOrElse {
false
}
} ?: false
//...
}
반응형
'Android > Other' 카테고리의 다른 글
[잡담] 사이드 프로젝트 6월달 회고 (0) | 2024.07.01 |
---|---|
[잡담] 사이드 프로젝트 1주차 회고 (0) | 2024.05.20 |
[잡담] 사이드 프로젝트 0주차 회고 (0) | 2024.05.20 |
[안드로이드] 의존성 주입(Dependency Injection, DI) (0) | 2024.03.28 |