#android

겍코겍코· 4개월

CameraX로 안드로이드 카메라 개발하기 📸

"카메라 기능, Jetpack으로 더 쉽고 강력하게!" 안드로이드 앱을 개발할 때 카메라 기능을 구현해야 한다면 한 번쯤은 고생한 경험이 있을 겁니다. 하지만 이제 CameraX를 사용하면 훨씬 쉽게 카메라 기능을 추가할 수 있습니다. CameraX는 Android Jetpack 라이브러리의 일부로, 최신 카메라 기능을 간편하게 사용할 수 있도록 도와줍니다. 이 글에서는 CameraX를 활용하여 안드로이드 카메라 기능을 구현하는 방법을 간략히 소개하겠습니다. 1. CameraX란 무엇인가? CameraX는 Android Jetpack 라이브러리의 일부로, 카메라 앱 개발을 단순화해줍니다. 기존 Camera API와 비교해서 몇 가지 장점이 있죠. 단순한 사용법: 기존 카메라 구현 코드의 복잡함을 줄여줍니다. 호환성: 다양한 기기와 버전에 맞게 최적화됩니다. 안정적 성능: 하드웨어 최적화로 더 부드러운 실행이 가능합니다. 기본 제공 기능: 이미지 캡처, 비디오 녹화, 실시간 프리뷰 기능을 기본 제공합니다. ** dependencies { // CameraX core library def camerax_version = "1.1.0" implementation "androidx.camera:camera-core:$camerax_version" implementation "androidx.camera:camera-camera2:$camerax_version" implementation "androidx.camera:camera-lifecycle:$camerax_version" implementation "androidx.camera:camera-view:1.0.0-alpha27" } 이후 Manifest 파일에 카메라 권한을 추가해 주세요. AndroidManifest.xml <uses-permission android:name="android.permission.CAMERA" /> 3. CameraX로 카메라 프리뷰 구현하기 🎥 카메라 프리뷰를 화면에 표시하려면 PreviewView를 사용하면 됩니다. 레이아웃 파일에 PreviewView 추가하기 <androidx.camera.view.PreviewView android:id="@+id/previewView" android:layout_width="match_parent" android:layout_height="match_parent" /> MainActivity에서 CameraX 초기화 val previewView: PreviewView = findViewById(R.id.previewView) val cameraProviderFuture = ProcessCameraProvider.getInstance(this) cameraProviderFuture.addListener({ val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get() val preview = Preview.Builder().build() preview.setSurfaceProvider(previewView.surfaceProvider) val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA cameraProvider.bindToLifecycle(this, cameraSelector, preview) }, ContextCompat.getMainExecutor(this)) 여기까지 설정하면 카메라 프리뷰가 화면에 나타납니다! 4. 이미지 캡처 기능 추가하기 📸 이미지 캡처를 구현하기 위해 ImageCapture 객체를 사용합니다. ImageCapture 초기화 val imageCapture = ImageCapture.Builder().build() 버튼 클릭 시 사진 촬영하기 val photoFile = File(externalMediaDirs.firstOrNull(), "photo.jpg") val outputOptions = ImageCapture.OutputFileOptions.Builder(photoFile).build() imageCapture.takePicture( outputOptions, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback { override fun onImageSaved(output: ImageCapture.OutputFileResults) { Toast.makeText(this@MainActivity, "사진 저장 완료", Toast.LENGTH_SHORT).show() } override fun onError(exception: ImageCaptureException) { Log.e("CameraX", "사진 저장 실패: ${exception.message}") } }) 이제 버튼을 누르면 사진이 저장됩니다! 5. 결론: CameraX로 더 쉽고 빠르게 개발하자! CameraX는 복잡한 카메라 기능을 빠르게 구현할 수 있는 강력한 도구입니다. 특히 호환성과 단순한 사용법 덕분에 초보 개발자도 쉽게 사용할 수 있다는 점이 큰 장점이죠. 앱에 카메라 기능이 필요하다면 꼭 한 번 CameraX를 사용해 보세요. 개발의 효율성을 높이면서 더 나은 사용자 경험을 제공하는 것이 가능해집니다.
162
1
0
무린무린· 4년

Kotlin에서 외부 라이브러리 사용하지 않고 JSON 데이터 파싱하는 3가지 방법

How to parse JSON in Android using Kotlin | John Codeos - Blog with Free iOS & Android Development Tutorials Parse JSON (simple, array, and nested) in Android without using any 3rd party library johncodeos.com 심플한 JSON, 배열로 된 JSON, 그리고 중첩된 JSON에 데이터에 대해 파싱하는 방법을 설명합니다.   심플한 JSON JSON 예:  { "id": "1", "employee_name": "Jack Full", "employee_salary": "300800", "employee_age": "61" } HTTP를 통해 response로 데이터를 받았다고 가정할 때 JSON 문자열을 JSONObject로 파싱한 후 데이터를 추출합니다. val jsonObject = JSONTokener(response).nextValue() as JSONObject // ID val id = jsonObject.getString("id") Log.i("ID: ", id) // Employee 이름 val employeeName = jsonObject.getString("employee_name") Log.i("Employee Name: ", employeeName) // Employee 급여 val employeeSalary = jsonObject.getString("employee_salary") Log.i("Employee Salary: ", employeeSalary) // Employee 나이 val employeeAge = jsonObject.getString("employee_age") Log.i("Employee Age: ", employeeAge)   배열로 된 JSON JSON 예: [ { "id": "1", "employee_name": "Tiger Nixon", "employee_salary": "320800", "employee_age": "61" }, { "id": "2", "employee_name": "Garrett Winters", "employee_salary": "170750", "employee_age": "63" }, // ... ] JSON 문자열을 JSONArray로 파싱한 후 반복 루프를 돌면서 값을 추출합니다. val jsonArray = JSONTokener(response).nextValue() as JSONArray for (i in 0 until jsonArray.length()) { // ID val id = jsonArray.getJSONObject(i).getString("id") Log.i("ID: ", id) // Employee 이름 val employeeName = jsonArray.getJSONObject(i).getString("employee_name") Log.i("Employee Name: ", employeeName) // Employee 급여 val employeeSalary = jsonArray.getJSONObject(i).getString("employee_salary") Log.i("Employee Salary: ", employeeSalary) // Employee 나이 val employeeAge = jsonArray.getJSONObject(i).getString("employee_age") Log.i("Employee Age: ", employeeAge) // Save data using your Model // Notify the adapter } // Pass adapter to the RecyclerView adapter   중첩된 JSON JSON 객체 안에 또 다른 JSON 객체가 있는 경우 중첩되었다고 합니다. JSON 예 :  { "data": [ { "id": "1", "employee": { "name": "Tiger Nixon", "salary": { "usd": 320800, "eur": 273545 }, "age": "61" } }, { "id": "2", "employee": { "name": "Garrett Winters", "salary": { "usd": 170750, "eur": 145598 }, "age": "63" } }, // ... ] } JSON 문자열을 JSONObject 로 파싱한 다음 JSON 데이터의 키값(위 예에서는 &#39;data&#39;)으로 JSONArray을 가져와서 루프를 돌며 값을 추출합니다. val jsonObject = JSONTokener(response).nextValue() as JSONObject val jsonArray = jsonObject.getJSONArray("data") for (i in 0 until jsonArray.length()) { // ID val id = jsonArray.getJSONObject(i).getString("id") Log.i("ID: ", id) // Employee val employee = jsonArray.getJSONObject(i).getJSONObject("employee") // Employee 이름 val employeeName = employee.getString("name") Log.i("Employee Name: ", employeeName) // Employee 급여 val employeeSalary = employee.getJSONObject("salary") // Employee 급여(달러화) val employeeSalaryUSD = employeeSalary.getInt("usd") Log.i("Employee Salary in USD: ", employeeSalaryUSD.toString()) // Employee 급여(유로화) val employeeSalaryEUR = employeeSalary.getInt("eur") Log.i("Employee Salary: ", employeeSalaryEUR.toString()) // Employee Age val employeeAge = employee.getString("age") Log.i("Employee Age: ", employeeAge) // Save data using your Model // Notify the adapter } // Pass adapter to the RecyclerView adapter  
8.4K
1
0
보브컷보브컷· 4년

안드로이드폰에서 카톡·네이버 '먹통'..구글 '웹뷰' 장애

안드로이드폰에서 카톡·네이버 '먹통'..구글 '웹뷰' 장애 [아시아경제 강나훔 기자] 23일 오전부터 삼성 갤럭시 등 일부 안드로이드폰에서 카카오톡과 네이버 등의 앱 실행 중단 오류가 이어지고 있는 것으로 나타났다. 업계에 따르면 이날 오전 8시께부터 구글 안드로이드 운영체제(OS)의 삼성전자·LG전자 스마트폰에서 네이버, 카카오톡, 증권앱 등 일부 앱 실행 시 '앱을 중지했습니다'라는 알림창이 뜨면서 먹통이 되는 news.v.daum.net 우리가 몰라서 그렇지 큰 기업도 이런 장애가 알게 모르게 비일비재하답니다~ 😮
1.2K
1
0
무린무린· 4년

코틀린으로 5G 네트워크 감지하기 (+ 겸사겸사 종량제 네트워크 감지하기)

5G Connectivity Almost exactly one year ago, I published a post on how to monitor changes in connectivity status. Since then, 5G networks have started to become more common. Also, I have found some improvements in h blog.stylingandroid.com 5G는 높은 전송 속도를 제공하지만 5G 관련 기능은 사용자의 앱이 5G인 상태에서만 실행되도록 해야합니다. 여기 코틀린에서 5G를 감지하는 방법이 있습니다. 겸사 종량제 네트워크인지 감지하는 방법도 뽀너스로~😁
1.5K
1
1
0
닥터핸
닥터핸·2021-03-09
?
무린무린· 4년

안드로이드 12의 몇가지 주요 기능과 API

Features and APIs Overview  |  Android Developers Learn about the new features and APIs for developers in Android 12. developer.android.com 이번 안드로이드 12 버전의 몇가지 주요 기능과 API입니다.   콘텐츠 수신용 통합 API 클립보드, 키보드, 드래그 앤 드롭 등에서 리치 콘텐츠를 수신할 수 있는 API를 제공합니다.   미디어 트랜스코딩 강화 HEVC(H.265), HDR, AVC(H.264)에 대한 트랜스코딩과 호환성이 강화됩니다.   AVIF 이미지 포맷 지원   오디오에서 햅틱 효과 생성 게임같은 것을 할 때 오디오와 동시에 햅틱 효과를 줄 수 있게 합니다. 나름 재미있을 것 같네요.   애니메이션 GIF 및 애니메이션 WebP에 대한 Native 이미지 디코더 지원 안드로이드 네이티브 자체적으로 애니메이션 이미지에 대한 디코더를 지원하네요.   그 밖에  - 안드로이드 엔터프라이즈에서 기기 정책 콘트롤러 개선  - Wi-Fi Aware 향상           
1.5K
1
0