본문 바로가기

Android

(30)
ActivityResultLauncher 로 MultiplePermissions 하기(다중 권한 요청) 처음으로 권한요청을 했을 때는 startActivityForResult() 를 하고 오버라이드 된 메서드에서 콜백만 처리하면, 해당 Activity 가 실행될 때 자동으로 진행되어 편했다. 그런데 많은 용량을 전달해야 할 때 증발해버리는 일이 생겨서 이러한 결과를 아예 따로 분리하는 작업이 있었고 결과적으로 위 메서드가 Deprecated, ActivityResultContracts가 생기게 됐다. 일단 다중권한 코드 먼저 보고 설명한다. 그대로 따라 해도 되고 조금 변형해도 된다. 1. 요청할 권한 문자열 리스트로 만들기 private String[] permissions = new String[] { Manifest.permission.READ_CONTACTS }; 권한들은 Manifest.permi..
BLE service intent 시, getApplicationContext() NullPointerException 해결 예전부터 https://github.com/android/connectivity-samples/tree/main/BluetoothLeGatt/Application/src/main/java/com/example/android/bluetoothlegatt GitHub - android/connectivity-samples: Multiple samples showing the best practices in connectivity on Android. Multiple samples showing the best practices in connectivity on Android. - GitHub - android/connectivity-samples: Multiple samples showing the best..
Android / windows Key hash 구하기(안드로이드 키 해시 구하기) 와...정말...와..너무 힘들게 해서 무조건 정리해놔야겠다. 카카오톡 API 와 연동하거나 외부 API 와 연동하려 할 때 앱을 인증해야 하는데, 그것을 보통 '키 해시'라고 하는 걸로 인증한다. 그런데 어떤 방법을 써봐도 되지도 않고, 다 생소한 방법이라 한~~~~~~~~참을 헤맨 끝에 알아냈다. 1. Open SSL 다운 https://code.google.com/archive/p/openssl-for-windows/downloads 압축파일로 downloads 경로에 다운되었다. 1-1. 압축파일 해제 및 경로변경 압축풀기를 같은 경로에 한 뒤 폴더명을 "ssl" 로 쉽게 바꾸고 C:\ProgramFiles\java\ssl 로 경로를 바꿨다. java 폴더 안의 jdk\bin 폴더를 보면 내부 파..
Android 카카오톡 로그인 구현 1. project 단위 gradle 에 저장소 연결 2. app 단위 gradle 에 의존성 연결 카카오톡 안내로는, 해당 의존성을 설치하면 retrofit, OkHTTP, GSON 까지 설치된다고 한다. 3. Manifest 에서 Internet권한 선언과 Activity 선언 4. 앱이 시작할 때 카카오 초기화(android.app 의 Application을 상속한 후 onCreate 오버라이드) 5. Manifest 의 application상단에도 이름 등록 6. 키 해시 등록 이렇게 표시되도록 마켓 출시 전이라면 패키지명과 키해시를 1개 이상 넣으면 된다. 키해시는 kakao라이브러리의 Utility.INSTANCE.getHashKey() 메서드를 사용했다. 참고로 안드로이드의 경우 마켓에 업로..
BottomSheetLayout (Backdrop) 구현 쉬울 줄 알았더니 은근히 헤매게 했던 놈이다. 1. 의존성 추가 implementation "androidx.coordinatorlayout:coordinatorlayout:1.1.0" 그 이름도 거창하게 "super powered frame layout" 이라고 소개돼있는 ViewGroup이다. BottomSheet 를 구현할 화면전체를 CoordinatorLayout으로 감싸준다. 2. Frame Layout 으로 Sheet만들기 FrameLayout을 상속해야만 Sheet 기능이 가능한 듯 하다. 아래 화면 구성은 이렇다. Coordinator로 남색화면 전체를 구성했고, 그 안에 들어있는 흰색 카드와 화살표 이미지를 묶어서 FrameLayout으로 구성했다. FrameLayout의 내부는 정렬을 ..
AsyncTask 사용 시 E/RecyclerView: No adapter attached; skipping layout 해결 처음 AsyncTask를 사용해보며 백그라운드 작업을 완료한 뒤 onPostExcute 콜백함수에서 리사이클러뷰 어댑터까지 세팅하는 구조로 코딩을 했다. 앱은 정상동작했지만 에러로그에 계속 E/RecyclerView: No adapter attached 라는 문장이 확인되었다. 검색해보니 메인 스레드가 한번 쭉 지나가면서 xml에 정의된 리사이클러뷰를 점검했더니 아직 어댑터가 연결돼있지 않으니까 해당 에러를 출력하고, 뒤늦게 백그라운드 작업이 완료돼서 앱은 정상동작하는 느낌이었다. (현시점 정확한 안드로이드의 구조를 몰라서 논리적인 설명이 어렵다) 그래서 빈 리스트를 주면서 onCreate (혹은 onCreateView) 함수 안에 비어있는 리사이클러뷰를 정상세팅해주고, onPostExcute에서는 no..