목록Android (47)
Foggy day
이번 포스팅에서는 디바이스에 있는 file들을 불러오는 것을 해보겠습니다. 1. 권한처리 2. ReadDeviceFile 1. 권한처리 Android api level 29를 기점으로 권한 처리를 다르게 해야합니다. 만약에 29 이하라고 한다면 READ_EXTERNAL_STORAGE권한을 추가 해야하고 런타임 권한을 획득해야 합니다. 30 이상이라면 MANAGE_EXTERNAL_STORAGE 권한을 추가하고, 모든 파일에 대한 접근 권한을 허용할 수 있는 시스템 창을 호출해야 합니다. 또한 외부 폴더에 접근하기 위해서는 Manifest의 appliction 태그 안에 android:requestLegacyExternalStorage="true"를 추가해야 합니다. Manifest MainActivity ..
이번 포스팅에서는 부트앱을 만들어보겠습니다. 부트앱은 디바이스의 전원이 켜졌을 때 실행되는 앱을 말합니다. 1. BootApp Reciever 만들기 2. Manifest 설정 3. 권한 요청 1. BootApp Reciever 만들기 Boot App을 만들기 위해서는 BroadcastReceiver를 추가해야 합니다. 디바이스의 전원이 켜지면 onReceive 함수에 진입하게 되고, Intent를 사용해서 원하는 Activity를 실행시킵니다. 그런데 Android OS 10 이상부터는 SYSTEM_ALERT_WINDOW 권한이 필요합니다. BootApp Receiver에서는 Settings.canDrawOverlays 함수를 사용해서 권한이 허용됐는지 아닌지만 체크합니다. 비허용이라면 return 함..
이번 포스팅에서는 안드로이드 런처앱을 만들어보겠습니다. 런처앱을 만들게 된 계기는 참여했던 프로젝트에서 디바이스가 켜졌을 때 아무것도 없는 화면을 보여줘야 했기 때문입니다. 기본적으로 Android Os가 제공하는 런처에는 시스템 앱들을 보여주고 있습니다. 하지만 프로젝트에서는 디바이스를 실행시켰을 때 기본적으로 설치된 시스템 앱들은 숨기고, 비어있는 화면만 보여줘야 했습니다. 그리고 해당 비즈니스에서 사용할 애플리케이션은 Boot App으로 만들어서 실행시켜야 했습니다. 이때 아무것도 없이 비어있는 화면을 보여주기 위해서는 런처앱을 만들어야 했습니다. 참여했던 프로젝트에서는 앱 목록을 보여주는 기능은 없었지만, 예제에서는 설치된 앱 목록들을 보여주고, 클릭했을 때 앱을 실행시키는 기능도 추가했습니다. ..
Debug 모드로 앱을 설치했는데 app이 보이지 않는 경우가 있다. 이런 현상은 manifest에서 scheme을 추가할 때 intent-filter에 설정을 잘못 해줬기 때문이다. 잘못된 경우 일반적인 intent-filter이다. scheme을 설정했을 때
1. 디바이스 play store -> 설정 -> 정보탭 -> Play 스토어 버전 7번 클릭 -> 개발자모드 변경 -> 일반탭 내부 앱 공유 활성화 2. Google play console 개발자 계정 접속 -> 배포 앱 클릭 -> 설정 -> 내부 앱 공유 -> apk나 app bundle 업로드
런타임(Runtime) 애플리케이션을 관리(메모리, 프로세스)하기 위해 컴파일러나 가상머신이 사용하는 기존 코드 라이브러리 혹은 프로그램이 실행되고 있는 동안의 동작 런타임 환경(Runtime Environment) 애플리케이션을 위한 서비스를 제공하는 가상머신 상태 안드로이드 런타임이란?(ART) ART의 주요 기능은 크게 세가지가 있다. 1. AOT(Ahead Of Time)나 JIT(Just In Time) 컴파일 2. 최적화된 가비지 수집 CG 3. 전용 샘플링 프로파일러, 상세 진단 예외 및 크래시 보고, watchpoint를 생성하여 특정 필드를 모니터링 할 수 있는 기능을 포함한 디버깅 기능 지원 일반적인 컬파일러 언어는 CPU와 플랫폼 환경에 맞춰 기계어로 컴파일된다. 즉 인간이 이해할 수..
Edit Configuration -> Installation Options -> Deploy : Default APK
class FragmentTest : Fragment(){ lateinit var onbackPressedCallBack: OnBackPressedCallback override fun onAttach(context: Context) { super.onAttach(context) onbackPressedCallBack = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { ToastUtil.showMessage("백 버튼 클릭") if (bottomSheetBehavior.state == BottomSheetBehavior.STATE_EXPANDED) { bottomSheetBehavior.state = BottomShe..
1. 공휴일 : 공공데이터포털 사이트 -> 특일 정보 API 호출 (Volley 이용) 2. 주말 : Calendar class를 이용해 계산 1. CalcHolidy object CalcHoliday { val 일요일 = 1 val 월요일 = 2 val 화요일 = 3 val 수요일 = 4 val 목요일 = 5 val 금요일 = 6 val 토요일 = 7 /** * 주말 체크 * 평일 : true, 주말 : false */ fun checkHoliday(dayNum: Int): Boolean { return when (dayNum) { 일요일, 토요일 -> false else -> true } } } 2. Holiday @Parcelize data class Holiday( val dateKind: Str..
private fun setViewPager2Height(){ viewPager2.setPageTransformer { page, position -> updatePagerHeightForChild(page, viewPager2) } } private fun updatePagerHeightForChild(view: View, pager: ViewPager2) { view.post { val wMeasureSpec = View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.EXACTLY) val hMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) view.me..