Android 16

[Java][Android] 안드로이드 자바 버튼 연속, 연타 방지 방법

왜 버튼 연타 방지가 필요한가요?서버 부하 증가: 사용자가 버튼을 빠르게 여러 번 누르면, 각 클릭마다 서버로 API 요청이 중복해서 전송될 수 있습니다. 이는 서버 리소스를 불필요하게 소모시키고, 심한 경우 서비스 장애로 이어질 수 있습니다. 의도치 않은 데이터 중복 생성/수정: 예를 들어 '게시글 작성' 버튼을 연타하면 동일한 내용의 게시글이 여러 개 생성될 수 있습니다. 사용자 경험(UX) 저하: 앱이 반복적인 요청으로 인해 느려지거나, 예기치 않은 동작을 보이면 사용자는 불편함을 느낍니다. 클라이언트 리소스 낭비: 불필요한 네트워크 요청은 사용자의 데이터 소모를 늘리고, 배터리 사용량에도 영향을 줄 수 있습니다. 마지막 클릭 시간으로 연타 방지 (Throttling)마지막으로 유효한 클릭이 발생한..

Android 2025.06.02

[Java][Android] SharedPreferences 데이터 암호화 하기!

내 앱의 비밀번호, SharedPreferences에 그냥 저장해도 될까? 🤫 EncryptedSharedPreferences로 안전하게!안녕하세요, 안드로이드 개발자 여러분! 앱 설정을 저장하거나 간단한 사용자 데이터를 유지할 때 SharedPreferences는 정말 편리한 도구입니다. 하지만 여기에 사용자 ID, 토큰, 심지어 (절대 그러면 안 되지만) 비밀번호 같은 민감한 정보를 그대로 저장하고 계신가요? 😱 루팅된 기기에서는 SharedPreferences 파일에 쉽게 접근하여 내용을 볼 수 있다는 사실, 알고 계셨나요? 오늘은 이러한 보안 문제를 해결하고, SharedPreferences에 저장되는 데이터를 안전하게 암호화하는 방법, 바로 **EncryptedSharedPreference..

Android 2025.05.26

[Java][Android] 화면 회전, 메모리 부족 onSaveInstanceState()로 데이터 지키기

안녕하세요, 안드로이드 앱을 만들다 보면 사용자가 화면을 가로로 돌리거나 세로로 돌릴 때, 입력했던 데이터나 현재 상태가 사라지는 경험을 해보신 적 있으신가요? 오늘은 이 문제를 해결하는 가장 기본적인 방법 중 하나인 onSaveInstanceState()와 onRestoreInstanceState()에 대해 알아보겠습니다. 왜 사라질까요?안드로이드에서 화면 방향이 변경되면, 현재 액티비티는 파괴(Destroy)된 후 다시 생성(Create)됩니다.이 과정에서 액티비티 내에 저장되어 있던 멤버 변수들의 값은 초기화되어 버립니다. 대처하기안드로이드는 이런 상황을 대비해 임시 데이터를 저장하고 복원할 수 있는 메커니즘을 제공합니다. 바로 onSaveInstanceState()와 onRestoreInstan..

Android 2025.05.19

[Java][Android]SMTP 지메일(Gmail) 연동하여 사용하기

연동할 지메일 계정으로 들어가 설정에서 모든 설정보기 클릭 다음 메뉴에서 전달 및 POP/IMAP 선택 후 아래와 같이 설정구글 오른쪽 상단 구글 계정 관리 클 보안 클릭 후 앱 비밀번호 검색 (검색 바로해도 상관없음) 개발에 사용 할 앱 이름이나(테스트 이름, 앱 이름 등등) 설정하면 비밀번호가 나온다 이런식으로 나온다. 잘 복사해서 저장하

Android 2025.05.13

[Java][Android] 안드로이드 가속계(accelerometer)센서, 흔들림 감지 예제

1. 개요안드로이드의 가속도계(Accelerometer) 센서를 이용하면 기기의 움직임, 방향, 흔들림 등을 감지할 수 있습니다.이 예제에서는 기기가 흔들렸을 때 특정 동작(예: 토스트 메시지 출력)을 실행하는 기본적인 흔들림 감지 앱을 만들어 보겠습니다.2. 왜 사용할까요??가속도계를 사용하면 다음과 같은 동작 기반 인터랙션을 구현할 수 있습니다:기기를 흔들어 기능 실행 (예: 랜덤 뽑기, 새로고침)사용자의 움직임 감지 (만보기, 피트니스 앱)게임 컨트롤러로 사용 (기울이기, 흔들기)보안 기능 (예: 강제 흔들 때 긴급 메시지 전송)3. 어디에 사용하면 좋을까요???예시설명랜덤 추첨 앱흔들면 결과를 무작위로 선택QR 스캐너흔들면 플래시 ON/OFF메모 앱흔들면 ‘실수로 지운 항목 복구’게임기기를 기울이..

Android 2025.05.12

[Java][Android] WorkManager로 백그라운드 작업 하기

개발에 따라 사용자와의 상호작용과 별개로 처리해야하는 작업들이 있습니다.: 예를들어 서버에서 데이터를 받아오거나, 파일을 저장하거나, 복잡한 연산이 필요한 경우 등등 여러가지 가 있습니다. 이런작업들을 화면을 그리는 메인 스레드 (UI 스레드)에서 직접 처리하면 ANR 오류 (애플리케이션이 응답하지 않습니다) 가 발생합니다. 고민을 해결하기 위해 Google에서는 Android Jetpack 라이브러리의 일부로 WorkManager를 선보였습니다. WorkManager는 백그라운드 작업을 처리할 수 있도록 합니다. 1. WorkManager란?WorkManager는 안드로이드 Jetpack 라이브러리의 핵심 구성 요소 중 하나로, 지연 가능하고(Deferrable) 실행이 보장되는(Guaranteed) ..

Android 2025.05.05

[Java][Android] 안드로이드 웹 스크래퍼 만들기: Jsoup

안녕하세요 이번에는 웹 페이지 내용들중 특정 부분의 텍스트를 안드로이드 앱으로 가져오겠습니다. 그럼 왜 웹 스크래퍼를 만들어서 사용할까요?자동화된 데이터 수집반복적으로 웹페이지에서 정보를 복사해오는 번거로운 작업을 자동화합니다.시간과 노력을 절약할 수 있습니다.외부 데이터 활용기존에 제공되지 않는 API 없이도 필요한 정보를 활용할 수 있습니다.예: 특정 웹페이지의 데이터만 제공될 경우 직접 스크래핑으로 데이터 수집커스터마이징 가능원하는 데이터를 선택적으로 추출할 수 있어 효율적입니다.특정 요소(예: 제목, 본문, 이미지 등)를 선택적으로 처리 가능앱 기능 확장실시간 정보를 제공하는 앱을 제작하거나, 외부 데이터를 기반으로 새로운 기능을 제공할 수 있습니다.경제적 효율성비용이 드는 API를 사용하지 않아..

Android 2025.01.06

[Android] QuickContactBadge를 사용해서 주소록 연락처 정보가져오기

앱을 기획에 따라 자신의 휴대폰에 저장한 주소록에 대한 정보를 가져올수있습니다! 저장된 휴대폰 번호 기준으로 작성해 보았습니다!   import android.content.ContentUris;import android.content.pm.PackageManager;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.widget.Button;import android.widget.EditText;import android.widget.QuickContactBadge;import an..

Android 2024.08.13

[JAVA][Android] 채팅중 키보드에 글자가 가려지는 경우 setStackFromEnd 사용 // RecyclerView 스크롤 키보드 가려지는경우

음.. 채팅기능을 구현 하려고 하다가 텍스트 입력창을 클릭할 경우 계속 리사이클러뷰에 출력된 아이템뷰나 텍스트가 계속 키보드 자판기 때문에 가려져 불편함이 생겼다. 이를 해결하기 위해 보통은 매니페스트에서하던가android:windowSoftInputMode="adjustResize|adjustPan"> 클래스에서 코드로 이렇게 입력을 한다.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);하지만 저렇게하면 화면뷰 전체가 위로 올라가버려 채팅을 구현할때는 맞지가 않았다.layoutManager.setStackFromEnd(false);그래서 위와 같은 코드를 사용하면 해당 리사이클러뷰 마지막 포지션 기준으로 키보드..

Android 2024.07.13

[JAVA][Android] ProgressBarLoad를 사용해 로딩 다이얼로그 만들기

간혹 통신을하다가 데이터를 수신받아 로드 될때 다른 버튼을 눌러 다른 작업이 되면 오류를 발생 할 수 있다이를 방지하기 위해 프로그레스바를 이용해서 설정한 시간동안 다른 버튼이 눌리지 않도록 해줄 수 있다그렇다면 통신이 다 되고나서 프로그레스바를 종료하게 되면 안전하게 데이터 로드가 가능해진다. activity_main.xml  progress_bar.xml  MainActitvityimport androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends App..

Android 2024.06.30