SSL Pinning 이다 뭐다 해서 http 통신 할 때 공개키를 비교를 해서 동작해야 할 경우가 있다.통신해야하는 도메인에서 공개키를 가져오는 코드를 확인해보자.private fun getHttpPublicKey() { CoroutineScope(Dispatchers.IO).launch { val hostname = "도메인 주소" val factory = HttpsURLConnection.getDefaultSSLSocketFactory() try { val socket = factory.createSocket(hostname, 443) as SSLSocket socket.startHandshake() ..
PC에는 익숙한 개념이지만,모바일에서는 익숙하지 않은 더블클릭(터치). Android UX상 롱클릭을 사용하는 편이 좋으나,혹시 필요한 경우가 생길 수도 있을꺼 같아, 예전에 만든 소스를 넣어두기로 했다. private int doubleClickFlag = 0;private final long CLICK_DELAY = 250;private void setDoubleClick() { findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { doubleClickFlag++; Handler han..
리스트를 검색할 때 실시간으로 해당 검색어에 해당하는 목록을 보여주며 리스트에 있는 문자열에 검색어를 하이라이트 처리 해야할 경우가 있다. 리컬시브 동작으로 간단하게 짜 보았다. private fun startSearchHighlight(tv: TextView, fullString: String, searchString: String, isCaseSensitive: Boolean) { var fullStr: String = fullString var searchStr: String = searchString if( !isCaseSensitive ) { // 대소문자 구분 필요없을 때 fullStr = fullString.lowercase(Locale.US) searchStr = searchString.l..
현업에 너무 정신없이 살다보니, 블로그가 잊혀진 존재가 되고 말았다. 일기처럼 쓰려고 했는데 생각처럼 잘 안된다. 각설하고, 매년 그래왔듯이 올해는 TargetSDK를 31로 해야 스토어 업로드가 가능해진다. 신규앱은 8월, 기존 앱은 11월 부터 인가? 아마 그럴 것이다. Target을 31로 올렸으니 BuildTools 도 31.0.0으로 올리려고 하니 떡하니 해당 오류가 발생하였다. 오류 땐 뭐다? 스택오버플로우지~~~ 보통 해결방법은 뭐 d8 파일을 찾아서 dx로 이름을 변경하면 문제 없다라고 하는 해결법이 가장 많이 발견 되었는데 뭔가 편법 같은 느낌이 나서 좀 더 답변을 찾는 중에 Tools 31 버전부터는 d8 사용을 위해 dx를 강제로 제거한 것 같다는 글과 함께 bulid:gradle:4..
for 문이나 while 문을 활용하여,문자열을 합칠 때 보통은 간단하게 += 연산자를 활용하여 수행한다. 그럼 보통 다음과 같은 warning을 보게 된다.Reports String concatenation in loops. As every String concatenation copies the whole String, usually it is preferable to replace it with explicit calls to StringBuilder.append() or StringBuffer.append(). 무슨말인지는 구글 번역 돌려보자! ㅋㅋㅋ+= 사용시 문자열 전체를 지속적으로 복사하여 붙이기 때문에붙이는 문자열이 길어질 수록 퍼포먼스가 떨어진다. 물론 리소스는 말할것도 없다.아래와 같이..
요즘 이래저래 정신이 없어,많은 글을 쓰지 못하고 있다. ㅜㅜ 개발하다보면, 네트워크를 사용하여 원격 저장소에 있는 이미지를 가져와,노티에 뿌려줘야하는 경우가 있다.이미지 레이지로딩을 할 수 있는 많은 오픈 소스가 있는데,오늘은 Glide 를 사용하여 띄우는 방법에 대해 남겨볼까 한다! 사실 글라이드 모듈에서는 NotificationTarget 이라는 굉장이 편리한 클래스를 제공한다. private void imageLoadNotification( Context context, Notification notification, String imgPath ) { if( context == null || notification == null ) { return; } NotificationManager mana..
안드로이드에서 ViewPager는 흔히 쓰는 뷰 컴포넌트이다. 보통 페이저 내부에는 플레이그먼트나 리스트뷰 혹은 리사이클러뷰가 들어가기 때문에,잘 몰랐던 증상이 발생했다. 내부 아이템 뷰에 클릭 리스너를 등록하면, 해당 뷰 플링 동작이 불가능하다 OTL....안드로이드 터치 이벤트는 리턴에 따라 부모 -> 자식 혹은 자식 -> 부모로 이벤트가 넘어가지 않도록 할 수 있는데,이게 굉장히 헷갈려서 삽질을 했다.다음에도 같은 삽질을 하지 않기 위해 미리 남겨 놓자! private GestureDetector gestureDetector = null;gestureDetector = new GestureDetector( mContext, new SingleTapGestureListener() );요렇게 선언되어 ..
- Total
- Today
- Yesterday
- notification
- fontFamily
- startForegroundService
- String append
- Android Custom Dialog
- Android 더블 클릭
- buildToolsVersion 31.0.0
- AnimationDrawable
- glide
- android o
- targetSdkVersion 31
- ViewPager
- FrameAnimation
- 문자열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |