Device Manager KMP
Kotlin Multiplatform 라이브러리로 Android와 iOS에서 권한 관리와 디바이스 정보를 통합된 API로 제공합니다.
직관적이고 간결한 API를 제공합니다.

| Module | Version |
|---|
| devicemanager-permission | 0.0.1 |
| devicemanager-device | 0.0.1 |
Features
- Permission Module - 런타임 권한 요청 및 상태 확인
- Device Module - 위치 모니터링 및 디바이스 정보
- Kotlin Multiplatform - Android & iOS 지원
- Coroutines - suspend 함수 기반의 비동기 API
Installation
Gradle (Kotlin DSL)
dependencies {
implementation("io.github.big-gates:devicemanager-permission:0.0.1")
implementation("io.github.big-gates:devicemanager-device:0.0.1")
}
Version Catalog
[versions]
devicemanager = "0.0.1"
[libraries]
devicemanager-permission = { module = "io.github.big-gates:devicemanager-permission", version.ref = "devicemanager" }
devicemanager-device = { module = "io.github.big-gates:devicemanager-device", version.ref = "devicemanager" }
Quick Start
1. 초기화 (Android Only)
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
PermissionHandler.init(this)
}
}
2. 권한 요청
val status = Permission.Camera.request()
when (status) {
PermissionStatus.Granted -> {
}
PermissionStatus.Denied -> {
}
PermissionStatus.PermanentlyDenied -> {
openAppSettings()
}
else -> { }
}
3. 권한 상태 확인
val status = Permission.Location.status()
if (status.isGranted) {
}
Permission Module
Supported Permissions
Permission Status
API Reference
Usage Examples
단일 권한 요청
lifecycleScope.launch {
val status = Permission.Camera.request()
if (status.isGranted) {
openCamera()
}
}
여러 권한 동시 요청
lifecycleScope.launch {
val results = listOf(
Permission.Camera,
Permission.Microphone
).request()
val allGranted = results.all { it.value.isGranted }
if (allGranted) {
startVideoRecording()
}
}
권한 상태에 따른 UI 분기
@Composable
fun CameraScreen() {
var permissionStatus by remember { mutableStateOf<PermissionStatus?>(null) }
LaunchedEffect(Unit) {
permissionStatus = Permission.Camera.status()
}
when (permissionStatus) {
PermissionStatus.Granted -> {
CameraPreview()
}
PermissionStatus.PermanentlyDenied -> {
SettingsPrompt(
onOpenSettings = {
coroutineScope.launch { openAppSettings() }
}
)
}
else -> {
RequestPermissionButton(
onClick = {
coroutineScope.launch {
permissionStatus = Permission.Camera.request()
}
}
)
}
}
}
Device Module
Device 모듈은 Permission 모듈을 포함하며, 위치 모니터링 등 디바이스 기능을 제공합니다.
Location Monitor
val locationMonitor = AndroidLocationMonitor(context)
val locationMonitor = IosLocationMonitor()
locationMonitor.start()
locationMonitor.state.collect { location ->
location?.let {
println("위도: ${it.latitude}, 경도: ${it.longitude}")
}
}
locationMonitor.enableLiveTracking(true)
locationMonitor.stop()
Note: start() 및 enableLiveTracking() 호출 전에 위치 권한이 필요합니다.
권한이 없으면 IllegalStateException이 발생합니다.
if (Permission.Location.isGranted()) {
locationMonitor.start()
} else {
val status = Permission.Location.request()
if (status.isGranted) {
locationMonitor.start()
}
}
Platform Setup
Android
AndroidManifest.xml에 필요한 권한을 선언하세요:
iOS
Info.plist에 필요한 Usage Description을 추가하세요:
Requirements
- Kotlin: 1.9.0+
- Android: minSdk 24+
- iOS: 14.0+
License
Copyright 2025 Big Gates
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http:
Unless applicable law agreed to writing, software
distributed under the License distributed an BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied.
See the License the specific language governing permissions
limitations under the License.