반응형 분류 전체보기171 [It's My Waye] 12. 알람 DB 구조 수정 알람 DB 구조 수정 개발 중 기존 알람 설정 기능의 반복 횟수와 간격이 쓸모가 없다는 생각이 들었다. 그와 반대로 진동과 전체화면 알람 설정과 같은 중요한 데이터가 DB에 빠져있었다. 이래서 처음에 꼼꼼하게 설계를 해야된다고 하나보다. 기존 코드의 구조를 뜯어고쳐야 한다는 것은 그리 좋은 일이 아니지만, 운좋게도 빠져야 할 컬럼의 수와 추가되어야 할 컬럼의 수가 같아서 RENAME 해주기로 했다. 기존 컬럼을 DROP하고 새 컬럼을 ADD 하는게 가장 좋겠지만, SQLite에선 컬럼을 DROP시키는 기능을 제공하지 않기 때문에 컬럼을 DROP하려면 컬럼이 빠진 새 테이블을 만들고 데이터를 전부 복사해야 한다. 이 대작업보단 이름만 바꿔주는게 훨씬 낫다 생각해서 그냥 RENAME을 사용했다. overri.. 2022. 5. 17. [Android] RecyclerView 스크롤 비활성화 Intro Android에서 RecyclerView를 사용할 때 스크롤을 비활서화하고 싶을 때가 있다. 하지만 기존의 스크롤 활성화 여부를 설정하는 setLayoutFrozen이 Deprecated 되었는데, 이제는 아래와 같은 방법으로 스크롤 활성화 여부를 변경할 수 있다. 스크롤 비활성화 recyclerView.suppressLayout(true) 스크롤 활성화 recyclerView.suppressLayout(false) suppressLayout을 true로 설정해두면 notifyXXXChanged로 인한 Layout 업데이트 작업이 일어나지 않게 된다. 따라서 데이터가 변경되어야 할 경우 잠깐 false로 설정했다가 notify 후 true로 바꿔주면 된다. recyclerView.suppres.. 2022. 5. 17. [Android] Vibrator 클래스로 진동 제어하기 Intro 진행중인 프로젝트에서 진동 기능을 사용하게 되어 개발 중 조사한 내용을 정리해봤다. Vibrator 인스턴스 생성 진동을 제어하기 위한 권한 설정 코드이다. vibrator = getSystemService(Vibrator::class.java) 클래스로 getSystemService를 호출하면 SDK 버전에 관계없이 Vibrator 인스턴스를 반환해준다. Android API 31부터는 Context.VIBRATOR_SERVICE가 Deprecated 되어서 String으로 받아오고싶다면 아래와 같이 처리해야 한다. vibrator = if(Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { getSystemService(Context.VIBRATOR_SE.. 2022. 5. 16. [Android] currentTimeMillis로 절대시간 구하기 Intro 앱 개발 도중 빌드 시간을 빌드번호로 만들기 위해 System.currentTimeMillis로 받은 현재 시간을 SimpleDateFormat 클래스를 통해 20220503101100과 같은 형식으로 변환해주는 코드를 작성했다. //BuildConfig.BUILDTIME: 빌드 시 호출된 System.currentTimeMillis() 결과값 binding.buttonTest.text = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()) .format(BuildConfig.BUILDTIME) 그런데 이 코드를 테스트폰과 AVD에서 실행시켰을 때, 둘의 현재 시간이 달라 빌드번호가 다르게 나왔다. SimpleDateFormat이 절대시간이 아닌.. 2022. 5. 3. [It's My Waye] 11. 알람 기능 구현 - 알람 제어 Intro 이전엔 단순히 알람을 켜고 끄기만 하는 서비스를 작성했다. 이제 알람을 언제 켜고, 언제 끌지 결정하는 클래스를 만들어야 한다. 모든 알람은 이 클래스를 통해 제어할 예정이기 때문에 싱글톤 패턴으로 만들어야 한다. Kotlin에선 싱글톤 패턴을 대체할 수 있는 object라는 키워드를 제공한다. class 대신 object로 선언하면 static으로 사용하는것과 비슷한 효과를 낸다. 알람 켜기 다른 앱의 noti를 읽고, 그 noti의 메시지에 내가 알람을 켜둔 아이템이 포함되어 있으면 알람을 켜는것이 기본 시나리오이다. noti 내용은 결국 String으로 전달되기 때문에, String을 받아 알림을 켜주는 함수를 만들면 된다. 우선 String 안의 아이템이 있는지 확인해 index를 반환.. 2022. 4. 27. [It's My Waye] 10. 알람 기능 구현 - 알람 켜기 개발을 미루고 미루다가 어느덧 마지막 글을 올린 날에서 3달 가량이 지나버렸다. 꾸준히 개발해왔으면 지금쯤 거의 다 완성돼있었을텐데 그렇게 하지 않고 게으름 피운 나에게 화가 난다. 이제 와서 다시 해봐야 늦었다는 생각도 늘지만 지금부터라도 다시 시작해보려 한다. 구현할 기능 기능 구현에 앞서 시나리오는 다음과 같다. 다른 앱 (Ex. 디스코드, 카카오톡) 에서 내가 알람을 켜둔 아이템의 이름이 메시지에 포함된 Notification 감지 해당 아이템의 알람 세부설정 확인 (Ex. 알림음, 볼륨, 반복 횟수, 반복 간격) 세부설정에 따라 알람 재생 이 중에서 3번의 역할을 하는 클래스를 구현했다. 알람 서비스 구현 알람 서비스는 알람을 재생/정지하고, 알람을 재생할 때 현재 음소거 모드와 볼륨을 변경하는.. 2022. 4. 27. [JPA] Entity 필드, 컬럼 매핑 Intro JPA에서 영속성 컨텍스트와 함께 가장 중요한 개념인 엔티티 매핑이다. Java의 클래스와 DB의 테이블을 변환해주고, 옵션을 설정하기에 따라 테이블을 자동으로 생성해주기도 한다. 아래의 간단한 클래스를 테이블로 매핑해보자. Entity의 경우 protected 또는 public의 기본 생성자가 반드시 있어야 하며, 클래스 또는 저장할 필드에 final을 붙이면 안된다. @Getter @Setter @NoArgsConstructor public class Member { private Long id; private String name; private String password; } @Entity, @Table 우선 "이 클래스가 엔티티이며, JPA에서 관리하도록 하겠다" 라는 의미를 부여하.. 2022. 3. 5. [JPA] 영속성 컨텍스트 영속성 컨텍스트 (Persistence Context)란? Entity를 영구적으로 저장하는 환경으로, JPA를 이해하기 위해 빼놓을 수 없는 개념이다. 논리적인 개념이기에 눈에 보이지 않고, EntityManager를 통해 접근할 수 있다. 우리가 이전 시간에 사용했던 EntityManager.persist(Entity)가 Entity를 영속성 컨텍스트에 저장한다는 뜻이다. 영속성 컨텍스트의 생명주기 영속성 컨텍스트엔 아래의 4가지 생명주기가 있다. 비영속 (New) 이제 막 생성되어 영속성 컨텍스트와 아무런 상관이 없는 상태이다. Member member = new Member(); member.setId("member"); member.setName("회원"); 영속 (Managed) 엔티티가 영속.. 2022. 3. 5. [JPA] DB에 데이터 넣어보기 DB에 데이터 넣어보기 이전 시간에 아래의 코드를 작성했다. public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); //code tx.commit(); em.close(); emf.close(); } } 이번 시간에는 코드에 들어간 클래스들에 대해 간단히 정리하고 넘어가고자 한다. EntityManagerFactory 애플리케이션 로.. 2022. 2. 26. 이전 1 ··· 7 8 9 10 11 12 13 ··· 19 다음 반응형