본문 바로가기

안드로이드

(41)
[프로젝트] 정각에 해야지 - 알림 오류 프로젝트 명 : 정각에 해야지 목표 : 스케쥴과 하루 루틴을 입력하고, 루틴에 대해서는 해당 시간에 알림을 보내 규칙적인 생활을 하기 위함 첫번째 문제 테스트용으로 루틴을 1~2분 뒤로 맞춰놓고 테스트하면 정상적으로 실행 그러나 다음날이 되면 알림이 밀려 앱을 실행하면 울리거나 울리지 않는 오류 발생 찾아보니 debug모드가 아닌 release모드로 컴파일하는 것을 추천하여 keystore를 생성하여 release모드로 컴파일 하였다. 테스트 결과 1~2분, 30분까지도 정상적으로 작동하였고, 다음날 9시에 루틴을 설정해놓고 기다렸다. 9시 5분.. 기다려도 알림이 오지 않아 앱을 실행했더니 알림 발생 똑같은 시간 밀림 현상이 발생했다. 안드로이드 공식문서에 따르면 (3번째 문단) https://deve..
[오류] Keystore file not set for signing config release 해당 오류는 keystore 경로 오류이다. 경로가 잘못되었을 때, 경로를 입력안했을 경우 해당 오류가 발생한다. 필자의 경우 release모드로 컴파일하기위해 keystore 생성 후 local.properties에 이와 관련된 정보들을 저장 후 사용하였는데 다음과 같이 입력하여 오류가 났다. local.properties storeFile = "keystore/release.keystore" 다음과 같이 사용할 경우 경로에 큰따옴표까지 포함되기 때문에 오류가 났던 것이다. 따라서 local.properties에서는 아래와 같이 사용해야 한다. storeFile = keystore/release.keystore 경로를 지정해주지 않았을 경우 경로를 지정해주지 않았을 경우에도 다음과 같은 오류가 발생한다..
[안드로이드] release 컴파일 안드로이드 컴파일에는 두 가지 종류가 있다. debug 와 release debug모드는 우리가 개발 시 흔히 사용하는 모드이며 테스트 모드라고 생각하면 편하다. release모드는 테스트가 끝나 배포할 상황에 사용하는 모드이다. 그렇다면 두가지의 차이점은 무엇일까? 차이점 대표적인 차이점으로는 debug모드는 실행파일에 디버깅정보를 포함시키기 때문에 용량이 커진다. 반대로 release모드는 디버깅 정보 없이 컴파일되어 실행파일로 만들어 진다. 또한 메모리 할당, 초기화도 모드 별로 다르다. (debug > release) 따라서 debug모드에서는 오류없이 정상적으로 실행되던 기능이 release모드에서는 오류가 발생하는 경우도 있다. release모드 사용 방법 release모드 사용에는 keyst..
[안드로이드] Permission (TedPermission) 권한 요청 Permission이란? 안드로이드 앱을 사용하다보면 오디오, 위치 등 권한을 요청 받아 본 적이 있을 것이다. 바로 그 권한이 permission이다. 어떤 기능을 구현하기 위해 위치, 카메라 오디오 등의 권한이 필요할 때가 있다. TedPermission은 권한 요청을 손쉽게 구현할 수 있도록 기능을 제공하는 오픈소스이다. https://github.com/ParkSangGwon/TedPermission GitHub - ParkSangGwon/TedPermission: Easy check permission library for Android Marshmallow Easy check permission library for Android Marshmallow - ParkSangGwon/TedPermi..
[안드로이드] BottomSheetDialog BottomSheetDialog는 어떠한 이벤트 발생 시 위와 같이 하단에서 내가 설정한 Layout을 보여주는 기능이다. 사용 방법 thmes.xml ... @android:color/transparent : 배경 투명하게 interview_bs_layout.xml BottomSheetDialog에서 보여주고 싶은 layout을 위와 같이 셋팅한다. drawable/bottomsheet_bs.xml(상단 테두리 둥글게) MainActivity.kt class MainActivity : AppCompatActivity() { private lateinit var bottomSheetDialog: BottomSheetDialog override fun onCreate(savedInstanceState: B..
[오류] Firebase SDK 동기화 오류 Firebase와 안드로이드 연결 셋팅 중 안드로이드에서 Gradle 추가하는 과정에서 다음과 같은 오류가 났다. Unable to find method ''com.android.build.api.variant.SourceDirectories$Flat com.android.build.api.variant.Sources.getByName(java.lang.String)'' 'com.android.build.api.variant.SourceDirectories$Flat com.android.build.api.variant.Sources.getByName(java.lang.String)' Gradle's dependency cache may be corrupt (this sometimes occurs afte..
[안드로이드] BroadCast Receiver 안드로이드 4대 컴포넌트 중 하나인 브로드캐스트 리시버는 어떠한 이벤트가 발생되었을 때 그에 관한 메시지를 받을 수 있게 한다. 예를 들면 기기 재부팅, 핸드폰 충전 등 시스템 이벤트가 발생했을 경우 브로트캐스트를 전송하며, 이를 수신하여 작업을 처리할 수 있다. 이외의 자세한 내용은 공식문서를 참고 바랍니다. https://developer.android.com/guide/components/broadcasts?hl=ko#receiving-broadcasts 브로드캐스트 개요 | Android 개발자 | Android Developers 브로드캐스트 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 앱은 Android 시스템 및 기타 Android 앱에서..
[안드로이드] Alarm Manager Alarm Manager란 말 그대로 설정한 시간에 설정한 작업을 수행할 수 있는 기능이다. 즉, 특정 시간에 앱을 사용하지 않아도 어떠한 작업을 할 수 있게 해주는 기능이며 특징은 다음과 같다. 지정된 시간에 또는 정해진 간격으로 인텐트를 실행 Broadcast receiver와 함께 알람을 사용하여 서비스를 시작하고 다른 작업을 실행할 수 있다. 애플리케이션 외부에서 작동하므로 알람을 사용하면 앱이 실행 중이 아니거나 기기가 대기 상태인 경우에도 이벤트나 작업을 트리거할 수 있다. 알람은 앱의 리소스 요구사항을 최소화하는 데 도움이 됩니다. 타이머 또는 계속 실행 중인 백그라운드 서비스를 사용하지 않고 작업을 예약할 수 있다. 이외의 권장사항 또는 장단점은 공식문서를 참고 바랍니다. https://d..
[안드로이드] RecyclerView Click Event RecyclerView 목록 클릭 이벤트의 방법은 두 가지가 있다. 첫 번째는 Adapter 내부에서 setOnClickEvent를 이용하는 것 두 번째는 인터페이스를 이용하는 것이다. 인터페이스를 이용하면 Adapter가 아닌 Activity 또는 Fragment에서 이벤트에 대한 작업을 실행할 수 있다. Adapter interface OnItemClickListener { fun onItemClicked(data: String?) } // OnItemClickListener 참조 변수 선언 private var itemClickListener: OnItemClickListener? = null // OnItemClickListener 전달 메소드 fun setOnItemClickListener(li..
[안드로이드] SharedPreferences 정보 또는 데이터를 앱 자체에 저장하는 인터페이스다. 이는 데이터베이스와는 다르며 Key & Value 값으로 저장된다. 주로 앱 환경설정에 사용된다. 사용 방법 MyApplication.kt SharedPreferences는 context를 필요로 한다. 따라서 어디서든 불러 사용할 수 있도록 MyApplication에서 호출한다. class MyApplication : Application() { companion object { lateinit var prefs: PreferenceUtil } override fun onCreate() { prefs = PreferenceUtil(applicationContext) super.onCreate() } } preferenceUtil.kt class Pr..