안드로이드 192

[Android/iOS] 웹뷰 브릿지 함수 JsonArray를 String으로 전달 할 때 이슈

웹뷰 브릿지 함수 JsonArray를 String으로 전달해야할 때 이슈웹에서 받은 javaScript fuction으로 결과를 return주는 작업에서 이슈가 발생했다.val js = "javascript:${String}(${String});"webView.evaluateJavascript(js) { jsCallback.callback(it)}  이유 : 문자열 내의 이중 인용부호(")가 제대로 파싱되지 않아 JSON 배열이 조기에 끊기기 때문Web에서 배열 "localAlarmList": "[{\"autoId\":1, ... 으로 될 때 String쪽 배열이 빨리 끊긴다. \" -> \\\\\"으로 바꿔주어 해결 [안드로이드 해결]웹 또는 네트워크 요청에서 JSON 배열을 문자열로 처리할 때,..

안드로이드 2024.11.18

[Android] 로컬 알람 적용 방법

안드로이드 로컬 알람을 적용하게 되었습니다.- 로컬알림 설정 후 정해진 알림이 브로드캐스트를 통해 onReceive가 되면 Notification을 띄워주는 작업적용하면서 알아 보았던 정보를 정리 해보려 합니다. 1. 알림 설정알림 설정을 하기 위해 AlarmManager를 이용 했습니다.기본알람(set, setRepeat) VS 정확한 알람(setExactAndAllowWhileIdle)알람 - 특정 시간에 이벤트를 받기 위하여 스케쥴링을 걸어놓는 작업노티피케이션 - 사용자가 UI로 디바이스 알림 목록 등에서 확인할 수 있도록 띄워주는 뷰의 개념정확한 알람Doze모드 등 특정 상황에서도 정확한 시간에 울리게할 수 있다.OS12이상에서는 앱 설정 > 리마인더 설정 옵션에 따라 알람이 on/off 된다.기..

안드로이드 2024.11.14

[Android] ArrayList에서 ConcurrentModificartionException 발생

ArrayList에서 add와 remove가 동시에 발생하면서 ConcurrentModificartionException가 발생 하였다.ConcurrentModificationException은 여러 스레드가 동시에 리스트를 수정하려고 할 때 발생해결 방안1. Collections.synchronizedList 사용동기화된 리스트를 생성할 수 있습니다. 이 리스트는 모든 접근이 동기화되어 있어 여러 스레드가 동시에 접근해도 안전합니다.val syncList = Collections.synchronizedList(mutableListOf())synchronized(syncList) { // 리스트에 요소 추가 syncList.add("example") // 리스트에서 요소 제거 syn..

[Android] Room DB에 대해 알아보자.

Room이란?Room은 스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 라이브러리Room은 완전히 새로운 개념은 아니고, SQLite를 활용해서 객체 매핑을 해주는 역할을 한다.Room 구조Entity개체관련 있는 속성들이 모여 하나의 정보 단위@Entitydata class User ( var name: String, var age: String, var phone: String){ @PrimaryKey(autoGenerate = true) var id: Int = 0}DAO데이터에 접근할 수 있는 메서드를 정의 해놓은 인터페이스@Daointerface UserDao { @Insert fun insert(user: User) @Update fun upd..

안드로이드 2024.06.26

[Android] OS 14 USE_FULL_SCREEN_INTENT 권한 & ForegroundServiceType

Android 14 USE_FULL_SCREEN_INTENT 권한 대응 & startForegrounService ForegroundServiceType 대응 Android OS 14에서 전체 화면 알림이 통화, 알람 제공앱으로 한정 되었습니다.안드로이드 14로 업데이트 하기전에 앱이 설치 되어있으면 이 권한은 활성화 상태로 유지 됨. 전체 화면 알림 권한Android OS 14에서는 사용자가 전체 화면 알림을 임의로 끌 수 있다.'USE_FULL_SCREEN_INTENT' 권한을 갖고있는지 여부는 NotimacationManager를 이용하여야 함.NotificationManagerCompat.from(context).canUseFullScreenIntent()나는 해당 화면의 알림 울리는 곳에서 권한..

[Android] CoroutineWorker와 Hilt를 사용한 파일 다운로드 및 압축 해제

CoroutineWorker와 Hilt를 사용한 파일 다운로드 및 압축 해제백그라운드에서도 다운로드가 진행 되야 해서 WorkManager를 사용할 예정- CoroutineWorker가 있다고 한다. Gradle기존 WorkManager를 사용하던 나는 종속성 변경을 하였다.// 기존implementation "androidx.work:work-runtime:2.8.1"// 변경implementation "androidx.work:work-runtime-ktx:2.8.1"이유는KTX 버전은 보다 간결하고 Kotlin에 적합한 확장된 기능들을 제공KTX 버전에서 CoroutineWorker가 포함.KTX는 Worker 클래스를 전달하거나 전달하기 위해 Data 객체 생성해야 할 때 편한 구문을 제공.Jav..

안드로이드 2024.06.14

[Android] Glide를 통해 이모티콘 Gif 구현하기

Glide를 통해 Gif를 보여주는데이모티콘 바텀시트에서는 Gif가 움직이면 안됌이모티콘 클릭시 정해진 횟수로 Gif 움직여야함디스크 캐싱을 하는데 이미지가 변경되거나 하면 새로운거 보여주고 다시 캐싱 해야함.이러한 요구 사항을 작업 하려고 한다.1.  Gif 움직이지 않게 하기Glide.with(activity) .asBitmap() .load(R.drawable.gif_rain) .apply(RequestOptions().diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)) .into(ivEmoticon)asBitMap()으로 움직이지 않게 한다. 2. 정해진 횟수로 Gif 움직이기Glide.with(activity) .asGif() ..

안드로이드 2024.06.14

[Android] 스토어 배포 경고 (디버그 기호 업로드)

스토어 배포 경고 (디버그 기호 업로드)스토어에 aab 파일 올렸을 때 경고창이 떴다. assemble로 빌드 apk 생성했을 때 lib정보도 같이 생김app/build/intermediates/merged_nativ_libs/프로젝트폴더/out/libx86_64x86armeabi-v7aarm64-v8a4개의 폴더를 포함한 압축파일을 올려주어야 한다. 오류The native debug symbols contain an invalid directory __MACOSX. Only Android ABIs are supported. The native debug symbols contain an invalid directory lib. Only Android ABIs are supported.The native..

안드로이드 2024.05.20

[Android] 프로젝트 설정 멀티 모듈 적용하기

안드로이드 프로젝트 설정 멀티 모듈 적용 해보도록 하겠습니다. nowinandroid 깃헙 보면 core 모듈안에 여럿 모듈이 들어가 있다. (2024.05.16 기준)모듈이 많은데 나는 필요한 모듈만 생성해볼 것이다.모듈 생성했을 때 폴더 모양초록색 점으로 표시되는게 Application(Android App Module)책 모양으로 표시되는게 Android Library파란색 네모로 표시되는게 Java & Kotlin Library 이다. 모듈 삭제 방법모듈을 잘못 생성했을 때 삭제 하는 방법File - Project Structure - Modules 에서 삭제 core 모듈 생성Core폴더의 모듈은 Android Library 템플릿을 사용한다고 함.나는 Java or Kotlin Library로..