전체 글 889

[안드로이드/Android] 폰인지, 태블릿인지 구분하기

1. TelephonyManager val telephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager if (telephonyManager.phoneType == TelephonyManager.PHONE_TYPE_NONE) { Toast.makeText(this, "Tablet", Toast.LENGTH_SHORT).show() } else { Toast.makeText(this, "Mobile", Toast.LENGTH_SHORT).show() } 2. Configuration 완벽하게 구분되지는 않는다. sw600dp 이상이면 태블릿으로, 이하이면 폰으로 구분된다. val screenType = resources.configu..

안드로이드 2023.04.05

[안드로이드/Android] onBackPressed Deprecated

OnBackPressedDispatcher ⚠️ activity.onBackPressed 는 Deprecated 되었다. OnBackPressedDispatcher OnBackPressedDispatcher | Android Developers androidx.constraintlayout.core.motion.parse developer.android.com // 필요한 시점에 해당 코드를 추가하면 된다. val callback = object: OnBackPressedCallback(true) { override fun handleOnBackPressed() { Toast.makeText(this@MainActivity, "뒤로가기 터치", Toast.LENGTH_SHORT).show() finish..

안드로이드 2023.03.28

[안드로이드/Android] Compose 에서 onBackPressed = BackHandler

안드로이드에서 기존에 뒤로가기 버튼 눌렀을 때 동작을 커스텀 할 때 onBackPressed() 메소드를 오버라이딩했씁니다. Jetpack Compose 에서는 어떻게 구현해야 할까요? BackHandler 라는 녀석을 사용하면 되는데요. 예제 코드를 보겠습니다. 뒤로 가기 버튼을 빠르게 두 번 눌렀을 때 앱을 종료하는 코드입니다. // 뒤로 가기 두 번 눌렀을 때 앱 종료 @Composable fun BackOnPressed() { val context = LocalContext.current var backPressedState by remember { mutableStateOf(true) } var backPressedTime = 0L BackHandler(enabled = backPressedSt..

안드로이드 2023.03.16

[안드로이드/Android] Compose BottomNavBar

0. 위 디렉토리 구조를 따라 아래 1~5번을 순서대로 실행하면 됩니다. https://github.com/Parksunggyun/BottomNavigationSample GitHub - Parksunggyun/BottomNavigationSample Contribute to Parksunggyun/BottomNavigationSample development by creating an account on GitHub. github.com 1. Home, Profile, Settings @Composable fun HomeScreen() { Box( modifier = Modifier.fillMaxSize().background(Color.Red), contentAlignment = Alignment.C..

안드로이드 2023.03.14

[안드로이드/Android] Compose TextField maxLength 설정하기

// maxLength 설정하기 val maxLength = 8 OutlinedTextField( modifier = Modifier .fillMaxWidth() .padding(start = 24.dp, end = 24.dp), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), leadingIcon = { Icon(imageVector = Icons.Default.Person, contentDescription = "Birth") }, value = birth, label = { Text("생년월일") }, placeholder = { Text("19920822") }, onValueChange = { if(it.text.le..

안드로이드 2023.03.14

[안드로이드/Android] Migration SharedPreferences to EncryptedSharedPreferences

의존성추가 implementation("androidx.security:security-crypto:1.0.0") // 사용 방법 val masterKeyAlias = MasterKey .Builder(applicationContext, MasterKey.DEFAULT_MASTER_KEY_ALIAS) .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) .build() val sharedPref = EncryptedSharePreferences.create( context, // Context, "encrypted_pref_name", // 파일명 masterKeyAlias, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES25..

안드로이드 2023.03.14

[플러터/Flutter] sound-null-safety 해결방법

플러터에서 배포파일을 만들 때 아래 이미지처럼 에러가 발생하는 경우가 있씁니다. 이런 경우 아래 이미지 처럼 Edit Configurations... -> Additional run args: 에 --no-sound-null-safety 를 입력하면 된다고 하는데, 말 그대로 run args 이기 때문에 배포할 때랑은 관계가 없습니다. aab 파일을 추출하는 flutter build appbundle 뒤에 --no-sound-null-safety 를 추가해주어야 해당 이슈를 무시하고 배포파일을 만들어줍니다. 이상입니다.

Flutter(플러터) 2023.03.10

[코틀린/Kotlin] Convert Kotlin to JSON/JSON to Kotlin

코틀린으로 작성된 객체를 JSON 형식 데이터로, JSON 형식 데이터를 코틀린 객체로 변환하는 방법에 대해 알아보겠습니다. 1. 데이터 클래스 선언 data class Person(val name: String, val age: Int) 2. 데이터 초기화 val person = Person("Park Altong", 32) 3. Convert Kotlin Object to JSON println(serialize(person)) // {"age":32, "name":"Park Altong"} 4. Convert JSON to Kotin Object val json = """{"name":"Park Altong", "age":32}""" println(deserialize(json)) // Person..

코틀린(Kotlin) 2023.03.10

[Android Compose] 안드로이드 컴포즈에서 Glide 호출하기

먼저 알맞은 버전을 build.gradle(:app) dependencies 에 의존성을 추가해주세요. implementation "com.github.bumptech.glide:compose:1.0.0-alpha.1" GlideImage( model = imageUrl, contentDescription = getString(R.id.description), modifier = Modifier.padding(padding).clickable(onClick = onClick).fillParentMaxSize(), ) GlideImage( model = imageUrl, contentDescription = getString(R.id.description), modifier = Modifier.paddin..

안드로이드 2023.02.20

[안드로이드/Android] 안드로이드 앱 아이콘 동적 변경하기

삼성 시계 앱을 보면 앱 아이콘에 현재 시간이 표시되고 계속해서 변경되는 것을 확인할 수 있습니다. 어떻게하면 이미 설치된 앱의 아이콘을 동적으로 변경할 수 있을까요? 안드로이드에서 제공하는 PackageManager 를 사용해 변경할 수 있습니다. 1. 먼저 기본 앱 아이콘, 변경할 앱 아이콘을 준비해주세요. 2. MainActivityAlias.kt 라는 클래스를 만들고 일반 액티비티처럼 AppCompatActivity를 상속해주세요. import androidx.appcompat.app.AppCompatActivity class MainActivityAlias: AppCompatActivity() { } 3. AndroidManefest.xml 에 아래 값을 추가해주세요. 태그를 추가해주시면 됩니다..

안드로이드 2023.02.16