본문 바로가기

OS

(73)
Android SHA1 Debug 이번에 파이어베이스 AUTH 기능을 사용하려고 했더니 파이어베이스에 SHA-1 값을 등록시켜야 쓸 수 있다고 한다. 일단은 개발하는 동안에는 디버그 SHA-1을 사용하는게 용이할 것으로 보인다. 출시할 때는 Release SHA-1을 등록해야하니 출시전에 꼭 확인해봐야 한다. 보통 디버그 SHA-1값을 볼 수 있는 방법으로 Android Studio의 Gradle을 이용하는 방법, 커맨드라인으로 확인하는 방법 이렇게 두가지가 있는 걸로 보이는데 첫 번째 방법은 mssing KeyStore라는 에러 문구가 떠서 두 번째 방법으로 진행했다. 1. CMD 오픈 2. cd C:\Users\{MyFolder}\.android 3. keytool -list -v -keystore debug.keystore -ali..
Android 키보드 보일 때 reclyclerView 마지막 아이템으로 스크롤 이동 자꾸 OnLayoutChangeListener를 까먹어서 포스팅한다. v_recyclerViewChat.addOnLayoutChangeListener(object : View.OnLayoutChangeListener { override fun onLayoutChange(v: View?, left: Int, top: Int, right: Int, bottom: Int, oldLeft: Int, oldTop: Int, oldRight: Int, oldBottom: Int) { if (bottom 0) { v_recyclerViewChat.scrollToPosition(m_arrChat...
Android RemoteViews Support View RemoteView을 사용할 때 위젯과 뷰그룹 제한이 있다는 것을 이번에 알았다. 기존 LinearLayout을 ConstraintLayout으로 변경했다가 30분 동안 삽질했음.. RemoteViews에서 지원하는 뷰와 위젯들이다. A class that describes a view hierarchy that can be displayed in another process. The hierarchy is inflated from a layout resource file, and this class provides some basic operations for modifying the content of the inflated hierarchy. RemoteViews is limited to suppo..
Android ConstraintLayout ImageView 맨 앞으로 위치 변경하기 이 번에 FrameLayout을 ConstraintLayout으로 변경하면서 발생한 문제에 대해서 포스팅을 하려고 한다. 상황 : 1. A라는 ImageView와 B라는 ImageView가 있다. 2. 항상 A보다 B가 앞에 놓여야 하는 상황이다. 3. A는 Glide를 사용하여 이미지를 로드한다. 4. B는 이미지 리소스를 사용한다. FrameLayout에서는 Glide Listener 사용하여 계층 트리를 조절하였다. if (!ads.image_url.isNullOrEmpty()) { Glide.with(context).load(ads.image_url).listener(object : RequestListener { override fun onLoadFailed(e: GlideException?, ..
Android JitPack 배포하기 안드로이드 개발하다가 파일로그가 있으면 좋겠다는 생각이 들어서 라이브러리를 하나 만들어보았다. 이왕 만든거 Jitpack에도 배포하기로 하였고 배포 과정을 기록하고자 포스팅을 남긴다. Jitpack 배포 과정에 초점을 두기 위해서 aar 만드는 세팅이 다 끝났다는 전제로 포스팅을 진행한다. 1. build.gradle(Module) apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.{git-name}' 여기서 git-name은 github 아이디를 뜻한다. 2. build.gradle(Project) classpath "com.github.dcendents:android-maven-gradle-plugin:2.1" 3. Gith..
AudioRecord to Wav 저장용 원래라면, 안드로이드에서 녹음은 MediaRecorder 면 된다. 하지만, SpeechRecognizer 등이나 Cloud Speech 가 들어간다면…. 그 이유로는, 음성인식 자체도 마이크를 가져가고, MediaRecorder 도 마이크를 가져가니.. 그나마 다행인 것으로는 Cloud Speech 를 사용하기 위해서 AudioRecord를 사용한다는 것이다. 그러면, 아래와 같은 꼼수를 할 수 있을 것 같다. 사용자가 먼저 말하면, 그걸 byte[] 로 읽어서 그대로 구글 서버로 보내고, outputStream 에 쓰면 되겠다. 목차 1. AudioRecord 생성 2. FileOutputStream 생성 3. AudioRecord 버퍼 읽기 4. 이대로 끝..? 5. WAV 헤더 6. 위 설명을 바..
안드로이드 Room 안드로이드 Room은 구글 AAC(Android Architecture Components)에서 권장하는 DB ORM(Object Relationnal Mapping)으로써 기존 SQLITE의 불편함 때문에 만들어졌다. Annotation을 사용함으로써 기존 SQLITE에 비해 유지보수 및 가독성이 뛰어나고, 런타임일때만 쿼리 검사를 할 수 있었던 SQLITE와는 다르게 컴파일 환경에서 오류 검사를 할 수 있다는 점이 장점이다. 기본적으로 Room은 Main Thread에서 데이터베이스에 접근하는 것을 막아놓은 상태이다.(옵션을 사용하여 접근할 수 있지만 권장하지 않음) 이종현님이 개념과 옵션들을 잘 정리해주셨으니 참고하도록 하자. medium.com/@gus0000123/mvvm-aac-room%EC%..
안드로이드 request Permission 안드로이드 API 23 이상부터는 사용자들에게 권한을 요청해야만 권한을 얻을 수 있다. 앱을 시작할 때 한번에 권한을 획득하는게 개발자 입장에선 편하지만 유저 입장에서는 당혹스러울 수 있으니 해당 권한을 필요로하는 기능을 실행하기전에 요청 하는 것을 권한다. 권한을 요청하는 소스를 계속 복붙하다보면 겉잡을 수 없이 소스가 더러워질 수 있으니 클래스로 따로 빼서 개발하도록 하자. object ComPermission { enum class EnumPermission { STORAGE_PERMISSION, CAMERA_PERMISSION } const val PERMISSION_REQUEST_OK = 87 private val m_arrStoragePermissions = arrayOf(Manifest.pe..