[안드로이드 / Kotlin] 네트워크 상태 체크
·
Android
앱 개발에 있어 네트워크 상태를 체킹하는 것은 필수적입니다. 이번 포스트를 통해 안드로이드에서 간단하게 네트워크 상태를 체크하는 방법에 대해 알아보도록 하겠습니다. class ConnectivityStatus(val context: Context) { private val cm = (context.getSystemService(Context.CONNECTIVITY_SERVICE)) as ConnectivityManager? fun getStatus(): Int { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 안드로이드 6이상 val nc: NetworkCapabilities? = cm?.getNetworkCapabilities(cm.activeNet..
[안드로이드 / Kotlin] 앱 재시작
·
Android
안드로이드를 개발하다보면 앱을 재시작해야할때가 있습니다. 그럼 앱을 재시작하는 방법을 알아보도록하겠습니다. 1) Intent 클래스의 makeRestartActivityTask() 함수 이용하기 val intent = context.packageManager.getLaunchIntentForPackage(context.packageName) val mainIntent = Intent.makeRestartActivityTask(intent?.component) context.startActivity(mainIntent) Runtime.getRuntime().exit(0) 2) Activity 클래스의 finishAffinity() 함수 이용하기 finishAffinity() val intent = Inte..
[안드로이드 / Kotlin] byte array를 hex string으로 변환
·
Android
데이터포멧으로 byte array를 많이 이용하곤합니다. 경우에따라 byte array형을 16진수 문자열인 hex string형 으로 바꿔야할때가 있습니다. 간단한 방법을 알아보도록 하겠습니다. val hexString: String = byteArray.joinToString(" ") { String.format("%02X", it) } (위 코드에서 byteArray는 바이트 배열을 나타냅니다.) joinToString()을 이용하여 바이트배열에서 바이트를 한개씩 뽑아와 String.format()으로 변환하여 하나의 16진수 문자열로 표현하실 수 있습니다. 만약 위와 같이 구분자를 두고싶다면 joinToString()메소드 인자에 구분자(separator)를 추가하시면 됩니다.
[안드로이드 / Kotlin] 다크모드 설정
·
Android
안드로이드 10버전부터 애플리케이션에도 다크모드를 적용할 수 있게 되었습니다. 다크모드는 배터리의 효율성을 높이고, 눈의 피로를 줄여주어 많은 사람들이 이용하고 있습니다. 이제부터 앱에서 다크모드, 라이트모드, 시스템모드로 설정하는 법을 알아보도록 하겠습니다. class Theme { companion object { fun applyTheme(context: Context) { var theme = 0// 초기화 할 테마번호 설정 // theme = .. // SharedPreferences를 이용하여 // 휴대폰에 저장되있는 테마번호를 가져옴 // .. applyDarkmode(context, theme) } fun applyDarkmode(context: Context, theme: Int) { /..
[안드로이드 / Kotlin] startActivityForResult 대체
·
Android
안드로이드에서 한 액티비티에서 새로운 액티비티를 띄울때 보통 startActivity() 메서드를 사용합니다. 그런데 경우에 따라서는 새로 띄운 액티비티에서 기존 액티비티로 데이터를 받아 돌아와야하는 상황이 발생하곤 합니다. 그때 사용하는 메소드가 startActivityForResult() 메소드입니다. 하지만 이 메소드는 deprecated 되었기때문에 registerForActivityResult() 메소드를 사용해서 대체할 수 있습니다. // deprecated 이전코드 fun startActivity() { val intent = Intent(this, NewActivity::class.java) startActivityForResult(intent, 100) } override fun onAc..
[안드로이드 / Kotlin] 코드로 문자열 밑줄 표현하기
·
Android
안드로이드를 개발하다보면 text에 밑줄을 긋고 싶은경우가 생깁니다. HTML Tag를 이용해서도 표현이 가능하나, 소스코드내에서 구현하는 방법을 알아보도록 하겠습니다. /** 문자열 밑줄 **/ fun setUnderline(str: String): SpannableString { val content = SpannableString(str) content.setSpan(UnderlineSpan(), 0, str.length, 0) return content } 매개변수로 한개의 문자열을 받고있는데 밑줄을 긋고싶은 문자열을 집어넣으면 됩니다. 핵심은 SpannableString 클래스의 이용입니다. setSpan() 메소드를 이용해서 밑줄을 그을 수 있습니다. (setSpan()의 두번째 매개변수는 시..
[안드로이드 / Kotlin] windowLightStatusBar
·
Android
안드로이드에서 다크모드, 라이트모드 혹은 임의 지정한 Status Bar 색상에 따라 상태바 내의 글씨가 보이지 않는 경우가 있습니다. 이 문제를 해결하기 위한 방법을 알아보도록 하겠습니다. true 위 코드를 res/values/theme.xml 에 추가하면 됩니다. (단, 해당 코드는 안드로이드 API 23 이상 부터 사용할 수 있으며, windowLightStatusBar 값이 true는 라이트모드, false일 경우 다크모드 시에 사용합니다 ) // API 30부터 deprecated됨 (API 30 이전) // window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE // 대체 코드 (API 30 이후) WindowInsetsContr..
[안드로이드 / Kotlin] 뒤로가기 두번 눌러서 종료하기
·
Android
안드로이드에서는 뒤로가기 버튼을 이용해서 앱을 종료할 수 있습니다. 하지만 이는 사용자 입장에서 앱이 예상치 못하게 쉽게 종료될 위험이 있으므로, 해당 문제를 방지하기 위해 특정 시간 내에 두번 뒤로가기 눌렀을 경우에만 앱이 종료되도록 할 수 있습니다. private var backPressTime: Long = 0 override fun onBackPressed() { if(System.currentTimeMillis() > backPressTime + 2000) { Toast.makeText(this, "'뒤로' 버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show() backPressTime = System.currentTimeMillis() return } if(S..
[안드로이드 / Kotlin] Array와 ArrayList 변환
·
Android
1. Array -> ArrayList val array = Array() val arrayList = array.toCollection(ArrayList()) 2. ArrayList -> Array val arrayList = ArrayList() val array = arrayList.toTypeArray()// 1 // val array = arrayList.toArray(arrayOfNulls(arrayList.size))// 2
[안드로이드 / Kotlin] 라디오버튼 Dialog
·
Android
안드로이드에서 제공하는 AlertDialog를 이용하면 여러 종류의 다이얼로그를 구현할 수 있습니다. 그 중 라디오버튼 다이얼로그를 간단히 만드는 법을 알아보도록 하겠습니다. fun startRadioButtonDialog(context: Context, items: Array, title: String, index: Int = -1) { var selectedIndex = index// 선택된 아이템 index val dialog = AlertDialog.Builder(context, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert) .apply { setTitle(title) setSingleChoiceItems(items, index, DialogI..