일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Kotlin
- coroutine
- error
- 깃헙
- Gradle
- 에러
- viewpager
- 안드로이드
- 레트로핏
- 코틀린
- 코루틴
- Retrofit
- build
- 웹뷰
- GIT
- MVVM
- Android
- studio
- 안스
- WebView
- dart
- RecyclerView
- image
- 유튜브
- 안드로이드 스튜디오
- 안드로이드스튜디오
- 스튜디오
- 의존성주입
- Github
- ADB
- Today
- Total
목록전체 글 (164)
코딩하는 일용직 노동자
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Yw5sl/btqD1NpJzMF/xk681Yh6AhhzF514W2AsW1/img.jpg)
유튜브에서 url을 공유할때 보면 www.youtu.be/nA8PosPb70c 이런식으로 url 이 클립보드에 복사됩니다. 이걸 웹뷰에서 열면 영상 뿐만 아니라 좋아요 버튼같은 유튜브의 다른 불필요한 UI도 화면에 표시됩니다. 웹뷰에 유튜브 영상 알맹이만 꽉차게 표시하고 싶으면 웹뷰에 www.youtube.com/embed/영상아이디 이렇게 하면 됩니다. 영상아이디는 유튜브 공유 URL 의 가장 마지막 / 뒤에 영문+숫자가 아이디입니다. www.youtube.com/embed/nA8PosPb70c 이렇게 호출시키니깐 웹뷰 화면에 영상이 꽉 차게 표시 됩니다. ^^ wvYoutube.settings.apply { javaScriptEnabled = true setAppCacheEnabled(true) pl..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bGtRye/btqD2Hos8zY/SKgaHCVbmOKKQ77vMMlaqK/img.png)
Github 에서 5월6일 새로운 협업도구 베타버전을 발표했습니다. - Github Codespaces - Github Discussion - Github Code Scanning - Github Secret Scanning - Github Private Instance #Github Codespaces www.github.com/features/codespaces 코드스페이스는 온라인 개발환경으로 브라우저 기반의 코드 에디터를 제공합니다. 브라우저에서 쉽게 깃허브 코드를 코딩, 빌드, 테스트, 디버그 및 배포할 수 있습니다. UI 디자인을 보면 Visual Studio Code 와 굉장히 유사한것을 알 수 있습니다. VS Code extensions 을 이용해서 개발도 할 수 있는것 같습니다. MS가 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ErpiN/btqDYuvcF1o/gWYTMOf7EVC5uuIIVWTKUk/img.jpg)
전체화면 사이즈의 Dialog 로 만들어진 화면이 있습니다. 메인화면에서 이동되는 서브화면이 모두 Dialog 로 만들어진 화면입니다. 그리고 이 화면은 웹뷰가 전체화면 사이즈로 배치되어 있습니다. 실행해보면 웹뷰로된 액티비티와 별반 다를게 없는 서브화면입니다. 이 화면이 키보드가 올라와있는 상태에서 웹의 팝업이 뜨게되면 키보드가 내려가면서 해당 부분이 제대로 그려지지 않아 하얗게 보이는 현상이 발생했습니다. 버튼 클릭시 키보드가 내려가는 시간과 팝업이 보이는 시간이 같아서 발생하는듯 합니다. 처음에는 팝업이 보이는 타이밍을 0.2~0.3초 정도 딜레이를 주면 되지 않을까 했는데... 문제는 로그인 화면뿐만 아니라 텍스트입력창이 있는 다른 여러 서브화면에서 똑같은 현상이 있기때문에 모든 화면의 팝업들에 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/VDAo0/btqDSzSpPca/aTHBLB9sapKJTBgtTlfKS1/img.png)
Android 10(Q) 부터는 기존의 저장공간과는 다른 개념으로 바뀌었습니다. 10 이전의 안드로이드는 기본적으로 내부저장공간과 외부저장공간으로 나뉩니다. # Android 10(Q) 이전의 Storage 내부저장공간은 샌드박스 형식으로 보호되는 공간을 할당받습니다. ex) com.kakao.talk, com.kakao.story, com.app.a 그리고 각 앱은 자신의 저장공간만 접근하고 사용할 수 있습니다. 10 에서도 내부저장공간은 마찬가지로 사용됩니다. 반면 외부저장공간은 하나의 큰 공통저장공간으로 운영되었습니다. READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE 권한만 있으면 어떤앱이 작성한 파일이든, 어느 경로에 있든, 어떤 파일이든 모두 접근/수정할 수 있었..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/buWmJg/btqDQ8tdsRq/gwgxaPzkBVzIlVuK1aaxKk/img.png)
let 객체의 null 체크에 주로 사용. val userName: String? = "" userName?.let { println("userName : $userName") } apply 객체의 생성과 동시에 값을 초기화 할때 주로 사용. val textView = TextView(this).apply { text = "Hello World!!" setOnClickListener{} } run 이미 생성된 객체를 재접근해서 값을 셋팅할때 주로 사용. textView.run { text = "안녕하세요" setOnClickListener{} } with View 에 접근할때 주로 사용. fun ViewHolder.onBindViewHolder() { with(binding){ adapter = this..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Ka1I8/btqDQcQAcXg/yVWTXWX6iaIjdRKbKJUxmk/img.jpg)
앱에서 파일 첨부하는 기능을 구현하던중 Intent.createChooser 로 구현했더니 파일을 선택하더라도 파일의 정보가 앱으로 리턴되지 않는 경우가 있었습니다. (특정 파일 탐색기 앱에서만 선택된 파일의 정보가 리턴되었다.) 쓸만한 파일탐색기 라이브러리를 찾아서 사용해보니 개발기간도 많이 단축할 수 있었고 편리하게 이용할 수 있었습니다. https://github.com/hedzr/android-file-chooser hedzr/android-file-chooser a lightweight file/folder chooser or picker. Contribute to hedzr/android-file-chooser development by creating an account on GitHub...
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Q5vIH/btqDQUhDtUb/YrpzhODU8KwfTwNK8pZ8vk/img.png)
cd ~ : 자신의 home 디렉토리로 이동. mkdir [폴더명] : 디렉토리 생성. cd [폴더명] : 디렉토리 안으로 이동. ls -al : 디렉토리 내부의 모든 파일 리스트 보기. (숨김 파일도 다 보임) pwd : 현재 디렉토리 경로 보기. clear : cmd 초기화. cp [원본파일] [복사후파일] : 원본파일을 새로운 이름으로 복사한다. vim [파일명.확장자] : vim 프로그램에서 파일을 생성하고 편집한다. i : vim 프로그램에서 입력모드로 전환. esc : vim 프로그램에서 입력모드 해제. :wq : vim 프로그램에서 저장하고 나가기. cat [파일명.확장자] : 파일 내용 표시 git init : git 저장소 만들기 (현재 디렉토리에서 버전관리를 진행하겠다고 git에게 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c9v3Sq/btqDSh3ZJGW/vDJhExYv2AcuM09hZ3E2W1/img.webp)
안드로이드 개발을 할때 보통 테스트폰을 컴퓨터에 연결한 상태로 디버그를 하게 됩니다. 하지만 Wifi 를 이용해 무선으로 디버깅할 수 있습니다. terminal 에서 아래의 방법대로 진행하면 됩니다. # wifi 상태에서 디버깅 하는 방법 폰과 컴퓨터를 케이블로 연결한 상태에서 진행합니다. adb tcpip [port] > adb tcpip 5555 adb connect [ip]:[port] > adb connect 192.168.0.35:5555 이제 컴퓨터와 폰의 케이블을 제거해도 네트워크로 디버깅 가능합니다. # USB 디버깅 상태로 다시 전환하는 방법 다시 폰 연결후 adb -s [ip]:[port] usb > adb -s 192.168.0.35:5555 usb 연결된 디바이스 목록 확인 ad..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b7N56f/btqDQcC46Jh/mTh0PEujhBmK6CQzROk6m1/img.png)
SSL 적용된 서버 접속하기 위한 소스. SSL 처리를 무시하는 소스이다. // TI2 val socketFactory = SSLContext.getInstance("SSL").let { sslContext -> val trustAllCerts = arrayOf(object : X509TrustManager { override fun getAcceptedIssuers(): Array? = emptyArray() override fun checkClientTrusted(certs: Array, authType: String) = Unit override fun checkServerTrusted(certs: Array, authType: String) = Unit }) sslContext.init(null,..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bhQZ2p/btqDQTC0qrS/ktlwAkV61XSkhGKwkkukok/img.png)
2019년 1월9일부터 안드로이드 SMS 권한정책이 변경되었습니다. 기존에는 RECEIVE_SMS 권한을 이용해서 SMS 내용을 읽고 인증번호를 자동입력을 해주었지만 이제는 예외신청을 하지 않으면 구글 플레이스토어에서 삭제 대상이 됩니다. https://developers.google.com/identity/sms-retriever/verify 이제는 SMS Retriever를 이용해서 권한 허용없이 문자를 읽어올 수 있습니다. 이 기능에는 약간의 제한사항이 있습니다. Android 단말에 Google Play Service version 이 10.2 이상 설치되어 있어야합니다. 그리고 SMS에도 몇가지 규칙이 있습니다. 1. 문자내용이 140byte를 초과하면 안됩니다. 2. SMS 맨앞에 가 반드시 ..