개발 공부/안드로이드 31

android Room 1 - 알아보기

1. 기본 설정 build.gradle(Module) 추가 plugins { ... id 'kotlin-kapt' // 추가 } dependencies { ... //2022-04-25 기준 implementation "androidx.room:room-runtime:2.4.2" kapt "androidx.room:room-compiler:2.4.2" } 2. Room의 기본 구성요소 데이터 항목, 데이터 액세스 객체(DAO), 데이터베이스 클래스 ​ 2-1 데이터 항목 저장하려는 객체를 나타내는 항목으로 데이터베이스의 한 행에 저장하려는 값을 말한다. 1개 이상의 PrimaryKey가 필요하다 @Entity data class User( @PrimaryKey val id: Int, val firstNa..

안드로이드 onNewIntent 관련 알아보기, lauchMode

onNewIntent란? intent를 이용해 이미 켜져있는 Activity를 startActivity(intent)로 재호출할 때(launchMode가 singleTop이거나 intent에 FLAG_ACITIVITY_SIGNLE_TOP을 추가한 경우 등 - standard로는 호출이 안됨. ) 불려지는 매서드다. 1. setIntent() onNewIntent가 불려졌을 경우 setIntent()를 하면 getIntent()의 리턴값을 변경하는 해준다. override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) setResultIntent() setIntent(intent) setResultIntent() } var clickCount ..

android, kotlin 시간차이 구하기

android 에서 시간을 가져오는 방법에는 여러가지가 있다. ​ 현재 시간을 가져올 때 많이 쓰는 System.CurrentTimeMillis() , 시간 차이를 구할 때 많이 쓰는 SystemClock.elapsedRealTime() 그 외 SystemClock.uptimesMills(), SystemClock.elapsedRealTimeNanos() 등등이 있다. ​ 1. System.CurrentTimeMillis() - 세계 표준시(UTC)로 1970년 1월 1일 00시 00분 00초를 기점으로 지금까지 얼마나 흘렀는 지를 밀리세컨드 단위로 리턴(Long 타입으로 반환)​​ ​ - 디바이스에 설정된 시각을 기준으로 리턴하기 때문에 시각이 변경되는 경우에는 시간 차이를 구할 때 정확하지 않을 수 ..

andrid SoundPool 음성파일/효과음 재생

SoundPool을 사용하면 간단하게 음성파일(효과음)을 재생할 수 있다. 메모리에 로드하여 사용하기 때문에 용량은 크지 않는게 좋다. ​ 1. 음성 파일 등록 음성 파일을 res에 New Resource Directory - raw파일을 추가해서 이 raw파일 안에 음성 파일을 넣는다. ​ 2. 코드 (kotlin) //sound pool build 해서 load 시킴 (기본 준비) private val soundPool = SoundPool.Builder().build() //load 할 때 sound id가 리턴으로 옴 var soundId = soundPool.load(this, R.raw.your_video_name, 1) // play soundPool.play(soundId, 1f, 1f, ..

android 권한 요청

권한을 요청할 때 라이브러리만 사용을 했었는데, 제공하는 것만으로도 간단하게 요청할 수 있다. 안드로이드에서 말하는 권한 워크플로는 아래와 같다. ​ 권한 확인 여부 → (권한 없을시) 권한 요청 → (권한 거부시) 권한이 왜 필요한지 설명 → 권한 요청 ​ ​ 상단의 플로우를 따라 예시로 내부 저장소 권한을 요청하는 코드를 작성하면 이렇다. (android develope 예시) when { ContextCompat.checkSelfPermission( this, android.Manifest.permission.READ_EXTERNAL_STORAGE ) == PackageManager.PERMISSION_GRANTED -> { // 내부 저장소 접근하는 코드 작성 } shouldShowRequestP..

android/kotlin Thread, runOnUiThread

안드로이드는 메인 thread에서면 ui 변경이 가능하다. ​ 하지만 ui 변경이 필요없는 작업(DB에서 정보를 가져오는 작업 등)에서는 메인 thread를 사용할 필요가 없다. ​ 그럴 때 thread를 별도로 사용했다가 UI 변경이 필요해지면 해당 사용중인 thread 에서 runOnUiThread()를 호출해서 UI 변경이 가능하다. ​ runOnUiThread()를 호출하면, 현재 tread가 메인 thread가 아닐 경우 메인 thread의 이벤트 큐에 추가된다. Thread(Runnable { // 작업 runOnUiThread { //UI 변경 } // 작업 }).start() https://developer.android.com/reference/android/app/Activity

android NumberPicker custom number/string 원하는 값으로 변경, wrapSelectorWheel

원하는 일자만 나오고, 자연스럽게 넘어가는 선택지를 만들고 싶어서 찾아보던 중 number picker에 원하는 string 이나 값을 넣을 수 있다는 사실을 발견! 바로 테스트 해보기로 했다. val numberPicker : NumberPicker by lazy{ findViewById(R.id.numberPicekr) } val values = listOf("10일","20일","30일") numberPicker.minValue = 0 numberPicker.maxValue = values.size-1 numberPicker.wrapSelectorWheel = false numberPicker.displayedValues = values.toTypedArray() 매우 만족스럽게 잘 나왔다 ㅎㅎ ​..

[android] SharedPreferences 파헤치기

간단하게 정보를 저장할 경우 SharedPreferences를 많이 사용하고 있다. 키-값으로 데이터를 저장하고 있으며 Int, Long, String, Double, Float, Boolean으로 저장 가능하다. 1. 사용 방법 val sharedPref = getSharedPreferences( "이름", Context.MODE_PRIVATE) //저장 sharedPref.edit { putString("이름","저장 정보") //String 형으로 저장 putInt("이름",0) //Int 형으로 저장 } //값 꺼내기 sharedPref.getString("이름","") // sharedPref.getString("이름") 이렇게도 가능 sharedPref.getInt("이름",0) 1-1 값 가..

[android] ripple drawable 버튼 클릭시 효과

버튼을 클릭할 때 클릭한 느낌을 주도록 효과를 주고 싶을 때! 배경색을 바꾸고 싶을 때! ripple을 사용하면 버튼 클릭시 간단하게 효과를 줄 수 있다. 터치한 부분에 따라 퍼져나가듯이 반응을 한다. //color #9ADFED #286189 //Drawable //클릭시 변경할 색 부분 //기본 색 부분 //layout Q.음영(shadow)을 없애고 싶다면? - xml 버튼에 추가해주면 끝! android:stateListAnimator="@null"

[Android] 글자 밑줄, 기울임, 굵은꼴 (HTML 마크업 사용) / + 취소선

1. 지원되는 HTML 요소 굵은꼴 굵은꼴 입니다. 기울임꼴 기울임꼴 입니다. 밑줄 밑줄 입니다. 2. 취소선 취소선의 경우 , , 로 지원 된다고 되어있으나 실제로 적용되지는 않음. 취소선 코드 : textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 예시 string.xml 해당 xml 화면 (취소선은 코드 작성) 결과