본문 바로가기
반응형

Android37

[Android] 백그라운드 서비스에서 카메라 사용시 주의사항 1. 포어그라운드 서비스를 이용해야함 안드로이드에서는 백그라운드에서 카메라를 사용할 때 서비스중 포어그라운드만 카메라 사용을 허용한다. 바인드 서비스로 시작했다 하더라도 startForeground를 호출하면 포어그라운드로 변경할 수 있다. 물론 노티피케이션을 만들어서 표출해야된다. 2. 매니페스트에서 서비스 설정 매니페스트에서 서비스를 설정할 때 아래처럼 카메라 서비스라는점을 반드시 표기해야 한다 ... 안그러면 백그라운드 진입하면 onError에서 4가 뜨면서 Camera "1" disabled by policy 같은 fatal이 발생하게 된다. 2023. 12. 1.
초간단 카메라2 개념잡기 1. 카메라 열기 카메라를 사용하려면 카메라부터 열어야 한다. 그러면 카메라 매니저를 얻어와야한다 아래처럼 카메라 매니저와, 내가 열고싶은 카메라 id를 가져오자. 보통 0번은 후면 메인카메라고, 1번은 전면카메라, 나머지는 딸려있는 카메라들이다 val cameraManager: CameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager val cameraId: String = cameraManager.cameraIdList[0]// 카메라 ID 선택 val cameraThread = HandlerThread("CameraThread") cameraThread.start() val cameraHandler = Handler(came.. 2023. 11. 16.
안드로이드 OpenGL 배우기 1부 - 기초 https://developer.android.com/develop/ui/views/graphics/opengl/about-opengl OpenGL ES | Android Developers OpenGL ES Stay organized with collections Save and categorize content based on your preferences. Android includes support for high performance 2D and 3D graphics with the Open Graphics Library (OpenGL®), specifically, the OpenGL ES API. OpenGL is a cross- developer.android.com 1. OpenGL 기초 .. 2023. 9. 28.
onUserLeaveHint 홈키 눌럿을때 이벤트 https://developer.android.com/reference/android/app/Activity Activity | Android Developers developer.android.com Called as part of the activity lifecycle when an activity is about to go into the background as the result of user choice. For example, when the user presses the Home key, onUserLeaveHint() will be called, but when an incoming phone call causes the in-all Activity to be automatically .. 2023. 7. 12.
wifi p2p 통신 시 특정 크기의 단위로 데이터 전송 방법 1. 개요 안드로이드에서 wifi p2p로 데이터 통신을 하다보면 특정 데이터 사이즈 크기만큼 자르면서 데이터를 전송하고 싶을 때가 있다. 허나 자바스크립트와 다르게 안드로이드는 이러한 방법에대한 API를 제공하지 않고 그저 continuous하게 데이터를 읽는 방법만 제공하고 있다. 2. 아이디어 read함수는 데이터를 특정 길이만큼 읽어올 수 있다. 허나 실제로 읽어온 데이터의 길이는 내가 요청한 데이터와 다를 수 있고, 함수의 리턴값으로 실제 읽어온 값을 사용한다. 이 리턴값을 이용하면 특정 데이터 크기만큼만 자르면서 읽어오는것이 가능하다 아래는 그 예시이다 val inputStream = socket.getInputStream() var result = ByteArray(614398) var ne.. 2023. 1. 17.
안드로이드 공부시 주의사항 개발자의 가장 중요한 덕목중 하나는 구글링이다. 당연히 안드로이드 개발자들도 구글링을 열심히 한다. 허나 한가지 주의사항이 있다. 만약 당신이 구글링해서 아래 공식문서로 들어갔는데 링크가 training으로 되있다고 하자 똑같은 내용을 공식문서에서 시작해서 다시 들어가 보면 guide 라고 나온다 그리고 둘의 내용이 다르다. 아래내용을 반드시 기억하자 guide의 링크가 걸린 내용이 좀 더 최신이고 설명도 더 알아먹게 되어있다 모든 항목에 대하여 guide url이 존재하지 않는다 그러므로 구글링으로 공식문서에 들어갔는데 url이 training이라 적혀있으면 반드시 공식홈페이지에서 수동으로 다시 들어가보자. 그럼 최신 내용의 문서가 있을지도 모른다 2023. 1. 12.
wifi direct p2p 연결 https://developer.android.com/guide/topics/connectivity/wifip2p?hl=ko Wi-Fi Direct(P2P) 개요 | Android 개발자 | Android Developers Wi-Fi Direct(P2P) 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Wi-Fi Direct(P2P)는 적절한 하드웨어를 갖춘 Android 4.0(API 레벨 14) 이상을 실행하는 기기가 중 developer.android.com 1. 개요 공식문서의 내용을 읽고 있는데 가독성이 도저히 안좋아서 좀더 편하게 읽기위해 블로글을 작성하게 되었다 WiFi-Direct란 와이파이 다이렉트란 P2P 연결을 해주는 기술이고 블루투스보다 훨씬 더.. 2023. 1. 11.
[Android] 커스텀 뷰 invalidate 사용 시 주의 사항 안드로이드 커스텀뷰를 사용할 때 뷰를 re-rendering 하기 위해서는 invalidate 함수를 호출해야 한다. 허나 이때 주의사항이 있다. 반드시 메인스레드에서 호출해야 된다. 그러지 않을 경우 갑자기 메인스레드가 먹통이 된다. 별다른 로그도 없이 갑자기 퀙 하고 먹통이됨. 앱을 종료해도 죽지 않고 프로세스가 좀비마냥 살아있어 다시 실행도 안되고 해결하려면 adb로 kill 해주거나 reboot을 해야한다. 만약 다른 스레드에서 invalidate를 호출하고 싶으면 postInvalidate() 함수를 사용하면 된다. - 2022. 8. 22.
[Android] apk에서 패키지네임 확인방법 구글링하면 aapt 사용법이 많이 나온다. 헌데 그건 deprecated 되었다고 한다. 대신 aap2를 이용하자 aapt2 dump badging "APK경로" 2022. 8. 22.
[Android] sp에서 dp로 변환, dp에서 sp로 변환 https://stackoverflow.com/questions/29664993/how-to-convert-dp-px-sp-among-each-other-especially-dp-and-sp How to convert DP, PX, SP among each other, especially DP and SP? I have known the difference among DP, SP and PX. And after searching this topic, I found nothing satisfying me completely. Maybe this post is a duplicate, but I still want to know what is the formu... stackoverflow.com 위 사이트를.. 2022. 7. 13.
[Android] 앱에서 스크린 캡쳐 막기, recent app 썸네일 가리기 앱에서 스크린샷을 막는 방법은 아주 간단하다 액티비티 안에서 FLAG_SECURE를 SET 해주면 된다. getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); 허나 이 플래그를 언제 SET해주는게 좋을 까? 케이스는 2가지 이다 1. 앱 사용 내내 스크린샷을 막고 싶을 때 이는 onCreate()에서 set 해주면 된다 public void onCreate() { getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); } 2. 앱에서 스크린샷은 허락하나 recent app으로 넘어갈때 스냅샷을 막고 싶을 때 만약 앱에서 screenshot은 허용하나 recent app으로 넘어갈 때 썸네일 이.. 2022. 7. 12.
[Android] Graphics Architecture https://source.android.com/devices/graphics/architecture 2022. 7. 8.
[Android] Graphics Overview https://source.android.com/devices/graphics 그래픽 | Android 오픈소스 프로젝트 | Android Open Source Project 그래픽 Android 프레임워크는 그래픽 드라이버의 제조업체 구현과 상호작용하는 다양한 2D 및 3D용 그래픽 렌더링 API를 제공합니다. 따라서 이러한 API가 더 높은 수준에서 어떻게 작동하는지를 제 source.android.com 안드로이드는 여러가지 그래픽 프레임워크를 제공한다. 이 페이지에 대한 내용은 그래픽 드라이버에 위치해 있는 graphic HAL에 대한 내용이다. 안드로이드 앱 개발자는 Canvas, OpenGL ES, Vulkan 세가지의 API써서 이미지를 그릴 수 있다 Android Graphics Compo.. 2022. 7. 8.
[Android] dp, sp, dpi, pt용어정리 DP Display Independent Pixel 이라는 의미이다. 디스플레이 크기와 상관없이 항상 일정한 크기를 나타내기 위해 사용하는 단위이다. dp를 위해서는 dpi라는 개념을 알아야 한다. dpi란 dots per inch 라는 뜻으로 1인치당 몇개의 픽셀이 안에 담겨있는지를 의미한다. dpi가 높을수록 1인치당 많은 픽셀들이 담겨있으므로 화질이 높다. 안드로이드에서느 1dp는 160dpi에서 하나의 픽셀(점)을 의미한다. 한마디로 1/160inch 라는 뜻 만약 dpi가 320dpi로 늘었다고 가정하자. 그럼 1dp는 2픽셀이 사용된다. dpi가 두배로 늘었으니 픽셀의 크기는 반으로 줄어들지만 사용되는 픽셀을 2픽셀로 늘었으니 크기는 동일하다. 그럼 1인치는 몇 dp일까? 바로 160이다. 그.. 2022. 7. 1.
[Android] RecyclerView 데이터 꼬일 때 대량의 데이터를 단순 출력하는데에는 RecyclerView가 최고의 선택일 것이다. 허나 단순출력을 넘어 데이터에 리스너등을 달아주는 순간 데이터가 꼬이기 시작한다. 이러한 문제의 원인은 ViewHolder를 재사용함에 있어서 발생하는 문제이다. 그럼 어떻게 해결해야 할 까? 걍 리스트뷰를 쓰는게 나을까? 해결방법1 : 재활용 막기 holder.setIsRecyclable(false); 위와같이 홀더의 재활용을 막으면 데이터 꼬임 문제를 해결 할 수 있다. 하지만 이렇게 하면 리사이클러뷰를 사용하는 의미가 없다 해결방법2 : 재활용 될 때 뷰를 초기화 하기 내가 찾은 해결방법은 onViewRecycled(ViewHolder holder) 메소드를 재 정의 하는 것이다. 뷰가 재활용 될 때 홀더를 싹다 초.. 2022. 6. 28.
[Android] Room DB 에서 query함수 동작 안할 때 데이터베이스에 직접 쿼리를 날리고 싶어서 객체를 까보니 query 함수가 있다. 헌데 동작을 안한다 망할. 하루종일 찾아보니 execSQL 함수를 쓰니 동작한다. 도대체 저 query 메소드는 정체가 뭘 까? 하루종일 고생했네 //db.getOpenHelper().getWritableDatabase().query("UPDATE user SET value = '123'"); db.getOpenHelper().getWritableDatabase().execSQL("UPDATE user SET cookTime = '123'"); 2022. 6. 24.
[Android] AlertDialog에서 showSoftInput 동작 안할 때 커스텀 레이아웃으로 Dialog를 만들고 그 안에 EditText를 넣은뒤 다이얼러그를 띄우면 바로 키보드가 뜨도록 하는 작업을 하게 되었다. 헌데 키보드가 올라오지 않는다... 구글에 검색해보니 나와 같이 AlertDialog로 커스텀 레이아웃을 쓰는 사람들 모두 똑같은 문제를 겪고 있었다. 하루종일 찾아보니 AlertDialog의 Window관련 Flag들이 문제를 일으키는게 원인이라 하던데... 대충 만져보니 showSoftInput 함수가 동작하였다. 단 Forced로 설정해야지만 동작한다. Forced로 하면 키보드 입력이 끝나도 키보드가 내려가지를 않음 ㅠㅠ... 어떤 flag를 만져야 할지 전혀 감이 안잡혀서 결국 생고생 하다가 나만의 workaround를 찾아 내었다. editText.re.. 2022. 6. 23.
[Android] 안드로이드 스튜디오 자동완성 코드찾기 안될 때 해결방법 File -> Invalidate Caches를 눌러서 안드로이드 스튜디오를 다시 시작해 주면 된다. 2022. 6. 20.
[Android] Recycler View 사용하기 https://developer.android.com/guide/topics/ui/layout/recyclerview RecyclerView로 동적 목록 만들기 | Android 개발자 | Android Developers RecyclerView로 동적 목록 만들기 Android Jetpack의 구성요소 RecyclerView를 사용하면 대량의 데이터 세트를 효율적으로 표시할 수 있습니다. 개발자가 데이터를 제공하고 각 항목의 모양을 정의하면 R developer.android.com 1. Recycler View란? 데이터를 리스트로 나타내주는 뷰 이다. 아니 그럼 리스트뷰 쓰면 되지 왜 Recycler View를 쓰는가? 그 이유는 리스트뷰가 가지고 있던 성능문제를 Recycler View는 해결했기.. 2022. 6. 15.
[Android] Service 배우기 https://developer.android.com/guide/components/services?hl=ko 서비스 개요 | Android 개발자 | Android Developers 서비스 개요 Service는 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않습니다. 다른 애플리케이션 구성 요소가 서비스를 시 developer.android.com 서비스란? 서비스는 안드로이드 어플리케이션을 구성하는 4개의 컴포넌트(액티비티, 서비스, 브도르캐스트, 컨텐트 프로바이더) 중 하나로 백그라운드에서 수행작업을 할 때 사용되는 구성요소이다. 서비스의 타입 서비스는 총 3가지의 타입이 존재한다 1. Foreground 서비스 포어그라운드 서비스는 유.. 2022. 5. 25.
반응형