목록Android (60)
Foggy day
이번 포스팅에서는 Android에서 SplashScreen을 적용하는 방법을 알아보겠습니다. 좀 더 정확하게는 앱 실행 후 launch activity가 나오기 전에 잠시 동안 나오는 window 화면의 UI를 수정하는 내용입니다. 아무 설정을 하지 않는다면 일반적으로 빈 화면이 노출됩니다. 여기서 말하는 SplashScreen은 SplashActivity를 말하는 것이 아닙니다. Android 12부터 사용 가능한 Splash API를 의미합니다. SplashActivity를 사용하지 않는 방법도 있지만, 예제에서는 SplashActivity와 SplashScreen을 둘 다 사용하겠습니다. 일반적으로 SplashActivity에서 처리해야 하는 작업들이 있기 때문입니다. 1. Dependency2...
최근 Kotlin으로 만든 Android Native앱을 업데이트 한 후 기존에는 없던 오류가 발생하는 일이 생겼습니다. 원인은 SharedPreference에 저장한 데이터의 형식이 변경됐기 때문입니다. 기존에 apple이라는 key로 int의 값을 저장했습니다. 업데이트 후에는 apple이라는 key의 타입을 Long으로 변경해서 사용했습니다. 개발을 할 땐 앱을 삭제 후 새로 설치하기 때문에 문제가 되는 것은 없었습니다. 하지만 일반 사용자들이 앱을 삭제하거나 데이터를 삭제하지 않고, 바로 업데이트해서 사용하는 경우 SharedPreference에 저장한 apple이라는 값의 type이 달라져서 오류가 발생했습니다. 운영하면서 경험해볼 수 있는 오류였습니다.
이번 포스팅에서는 Android의 접근성 서비스(AccessibilityService)에 대해 알아보겠습니다. 접근성 서비스는 기본적으로 장애가 있는 사용자를 위한 서비스입니다. 하지만 디바이스의 화면을 컨트롤 하기 위해 많이 사용되곤 합니다. Accessibility services should only be used to assist users with disabilities in using Android devices and apps https://developer.android.com/reference/android/accessibilityservice/AccessibilityService AccessibilityService | Android Developers developer.android...
Android에서 Overlay 기능이 필요할 때가 있습니다. 예를 들어 네비게이션 앱처럼 앱을 백그라운드 상태로 두더라도 화면에 특정 View를 보여주는 것입니다. 이럴 때 사룔하는 것이 Overlay 기능입니다. 다른 앱 위에 우리가 설정한 View를 보여주고, 특정 로직을 수행할 수 있습니다. 이를 위해서는 권한 요청과 Service 클래스를 구현해야 합니다. Overlay를 사용할 때 주의할 것은 앱을 종료시키더라도 Overlay가 같이 종료되는 것은 아니라는 점입니다. 때문에 비즈니스 로직에 따라서 어떠한 경우에 overlay를 종료시킬지, 계속 살려둘지를 잘 설정해야 합니다. 또한 Service만 종료시키는 것이 아니라 View들도 직접 제거해줘야 합니다. 예제에서 구현한 기능 1. Overl..
MediaRecorder 클래스를 사용해서 음성 녹음 기능을 구현해보겠습니다. 1. 권한 추가 2. 녹음 코드 구현 1. 권한 추가 음성 녹음을 위해 Audio 권한과 녹음한 파일을 저장하기 위한 storage 권한을 추가하겠습니다. 그리고 application tag에 android:requestLegacyExternalStorage="true"를 추가 하는 것 또한 잊지 마세요. AndroidManifest ... runtime으로 권한을 요청하겠습니다. ActivityCompat.requestPermissions( this, arrayOf( Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.pe..
안드로이드 fcm을 수신하는 방법을 간략히 정리했습니다. 1. 파이어베이스 2. Android 코드 구현 1. 파이어베이스 Fcm을 수신하기 위해서는 파이어베이스에 등록 작업을 해야 합니다. 사진은 생략하고 처리 해야 할 항목만 나열하겠습니다. - 프로젝트 생성 - google-services.json 파일 다운로드 및 프로젝트에 추가 - 안드로이드 앱 추가 - 앱을 추가한 후에 프로젝트 설정 -> 일반 -> Sha 인증서 추가 sha1 키 발급 방법 https://jinhan38.com/14 Android(안드로이드) - How to get debug/release SHA-1 Sha key is needed when we use api like google and kakao and so on. So, ..
UsageStatsManager 클래스를 사용하기 위해 PACKAGE_USAGE_STATS 권한을 요청해야 했습니다. 1. manifest에 permission 추가 2. 런타임 권한 요청 private fun checkPermissionUsage(): Boolean { val appOps = applicationContext .getSystemService(APP_OPS_SERVICE) as AppOpsManager val mode = appOps.checkOpNoThrow( AppOpsManager.OPSTR_GET_USAGE_STATS, Process.myUid(), applicationContext.packageName ) val granted = if (mode == AppOpsManager.M..
android.permission.SYSTEM_ALERT_WINDOW 권한은 overlay View를 사용하기 위해 필요합니다. 1. manifest 에 permission 추가 2. 런타임 권한 요청 checkPermissionOverlay 함수로 권한을 요청하면 권한 허용 시스템 창으로 이동하게 됩니다. 그리고 다시 화면으로 돌아왔을 때 onActivityResult에서 권한을 허용 했는지 아닌지 확인할 수 있습니다. const val overlayPermission = 100 .... private fun checkPermissionOverlay(): Boolean { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Settings.canDra..
이번 포스팅에서는 디바이스에 있는 file들을 불러오는 것을 해보겠습니다. 1. 권한처리 2. ReadDeviceFile 1. 권한처리 Android api level 29를 기점으로 권한 처리를 다르게 해야합니다. 만약에 29 이하라고 한다면 READ_EXTERNAL_STORAGE권한을 추가 해야하고 런타임 권한을 획득해야 합니다. 30 이상이라면 MANAGE_EXTERNAL_STORAGE 권한을 추가하고, 모든 파일에 대한 접근 권한을 허용할 수 있는 시스템 창을 호출해야 합니다. 또한 외부 폴더에 접근하기 위해서는 Manifest의 appliction 태그 안에 android:requestLegacyExternalStorage="true"를 추가해야 합니다. Manifest MainActivity ..

이번 포스팅에서는 EventChannel에 대해 알아보겠습니다. EventChannel(이벤트채널)이란? - 이벤트 채널은 플랫폼들이 이벤트 스트림을 사용해서 통신하는 방법입니다. 데이터 전송 방향은 Native -> Flutter입니다. 1. Dart EventChannel 2. Android EventChannel 1. Dart EventChannel 먼저 Dart 코드에서 이벤트 채널(스트림)을 등록해 보겠습니다. EventChannel 클래스를 생성해야 하는데 이때 생성자에 채널명을 넣어주세요. EventChannel 클래스의 receiveBroadcastStream 함수의 리턴 타입은 Stream이므로 listen 함수를 구현할 수 있습니다. listen 함수의 event에는 Native에서 전..