728x90

 

해당현상

 

 

해결책: Manifest.xml의 <intent-filter> 사이에 아래의 코드 추가

<action android:name="android.intent.action.VIEW" />

 

<예시>

- 기존

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 <application
        android:name="경로.MyApp"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:largeHeap="true">
        <activity
            android:name="경로.LogInActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="stateHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>
cs

 

 

- 변경

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 <application
        android:name="경로.MyApp"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:largeHeap="true">
        <activity
            android:name="경로.LogInActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.NoActionBar"
            android:windowSoftInputMode="stateHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.VIEW" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>
cs

 

 

 

Reference

https://stackoverflow.com/questions/34367875/android-adding-at-least-one-activity-with-an-action-view-intent-filter-after-u

728x90
728x90

 

안녕하세요. 오늘은 갤럭시 스토어에서 판매하고 있는 '셀럽알람'에 대한 글을 가지고 왔습니다. :)

 

- 내가 좋아하는 케이팝 스타의 목소리로 아침에 일어난다면?
   삼성의 갤럭시 스토어에서 구매가 가능한 셀럽알람!

 

 

 

 갤럭시 스토어에서 '셀럽알람'이라고 검색을 하면,

아래처럼 케이팝스타들의 TSA를 구매할 수 있게끔 나오는데요

 

 

 

- 프리뷰로는 여자친구의 은하가 셋팅되어있구요

 

 

- 워너원 출신의 강다니엘 / 박지훈

 

- 뉴이스트의 민현

- 에이핑크의 손나은

 

 

그 외에도 GOT7, ITZY, 아스트로, 몬스타엑스, 세븐틴 등 유명 그룹들이 존재합니다.

 

 

* 셋팅 방법!

- '시계' 혹은 알람으로 접근 -> '알람음'에서 빅스비알람으로 원하는 보이스를 설정하면 됩니다. :)

 

728x90
728x90

 

Title: Android Jetpack: Understand the CameraX Camera-Support Library (Google I/O'19)

Speaker(s): Vinit Modi, James Fung, Franklin Wu, Trevor McGuire

 

 

 

1. 카메라 개발은 어렵습니다. 이유는?

- 앱에서 다양한 OS별로 신경써야함

- 저가형 entry부터 고가의 flagship까지 일관성이 있어야함

- 카메라 API의 복잡성

 

 

2. (testlab에서 테스트 다 하면서 개발했다는) CamaraX

 - 현 시장의 90%에 가까운 기기에서 호환됨

 - target SDK가 API 21 이상이면 사용 가능

 - Camera1 Api 및 Camera2 Legay Layer와 일관되게 제공됨.

 - 사용하기 쉬워짐

 - Lifecycle aware: Preview, Image Analysis, Caputre 기능 -> 각 개별 thread 필요 없어짐

 - 

CameraX 이전, CameraX 이후 동작

 

3. 사용 예제

 

1) Preview

/*display preview on screen*/

//configure preview
val previewConfig = PreviewConfig.Builder().build()

//create preview
val preview = Preview(previewConfig)

preview.setOnPreviewOutputUpdateListener {
    PreviewOutput : Preview.PreviewOutput? ->
    // your code here. e.g. use previewOutput?.surfaceTexture
    // and post to a GL renderer.
}

//attach preview to lifecycle
CameraX.bindToLifecycle(this as LifecycleOwner, preview)

 

2) Image Analysis

 

//configure image analysis

//set resolution
val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setTargetResolution(Size(1280, 720))
    .build()

//create image analysis
val imageAnalysis = ImageAnalysis(imageAnalysisConfig)

//attach output
imageAnalysis.setAnalyzer({ image : ImageProxy, rotationDegrees : Int ->
    val cropRect = image.cropRect
    //insert your code here
})

//attach image analysis & preview to lifecycle
CameraX.bindToLifecycle(this as LifecycleOwner, imageAnalysis, preview)

 

 

 

 3) Image Capture

 

/*configure image capture*/

//manage rotation
val imageCaptureConfig = ImageCaptureConfig.Builder()
    .setTargetRotation(windowManager.defaultDisplay.rotation)
    .build()

//create image capture
val imageCapture = ImageCapture(imageCaptureConfig)

//bind all use cases
CameraX.bindToLifecycle(this as LifecycleOwner, imageCapture, imageAnalysis, preview)

 

//on user action save a picture
fun onClick() {
    val file = File(...)
    imageCapture.takePicture(file,
        object : ImageCapture.OnImageSavedListener {
            override fun onError(error: ImageCapture.UserCaseError,
                                message: String, exc: Throwable?){
                // insert your code here 
            }
            override fun onImageSaved(file: File) {
                // insert your code here
            }
        })
}

 

 

 

Reference

https://www.youtube.com/watch?v=kuv8uK-5CLY

 

728x90
728x90

 

 안드로이드에서는 고전적으로 XML에 선언한 UI와 Java(혹은 Kotlin) 클래스를 연결하기 위해 'findViewById'를 사용했습니다. findViewById를 사용하게 되면 다음의 문제가 발생합니다.

 

 

From Udaity

 


 1) 하나의 View를 전역변수로 저장해서 사용해야함 

   -> 전역변수 선언, findViewById로 연결

 2) 만약 다른 xml에 존재하는 유사한 id를 입력하는 오탈자가 발생?

   -> 빌드 에러는 없는데 런타임 오류 발생

   -> 만약 초기화가 제대로 되지 않을까 걱정근심과 더불어, 객체 생성에 대한 null처리 추가

 


 

 

 이처럼 자연스럽게 발생되는 수 많은 보일러 플레이트 코드들... 아주 간단한 화면이라면 UI의 뷰 혹은 레이아웃이 5개 미만일 수 도 있겠지만, 고객의 요구사항에 따라 뷰의 복잡도가 늘어가는 경우가 다반사 입니다.

 

 

 이와 같은 문제를 해결하기 위해 등장한 개념이 바로 데이터바인딩인데요.

 


Data Binding(데이터 바인딩)은

애플리케이션 UI와 비즈니스 논리를 연결하는 프로세스를 뜻합니다.


 

 

 

 findViewById를 해소하기 위해 ButterKnife 라이브러리 등이 있었지만, 데이터 바인딩 개념을 보다 더 공고히 만든 라이브러리는 현재 대표적으로 2가지가 있습니다. 즉, 공식적으로 구글에서 만들어준 Android Data Binding Library와 Kotlin Android Extensions(약칭 KTX)입니다. 

 사실 저는 처음에 두가지가 같은 것인 줄 알았습니다. 요새 트렌드가 코틀린이고, 전 아직 내부 프로젝트 협의 여건상, 자유롭게 코틀린으로 갈아타지 못한 유저라서 더 혼동이 되었는데요. 저와 같은 초보자들을 위해 설명 드리자면, 둘 다 findViewById로 인한 문제를 간소화 한다는 점에서는 동일하지만, 사실 성질이 다릅니다.

 

 

두 라이브러리의 공통점

  • findViewById로 처리했던 코드를 간소화하며, xml에 선언한 id를 자동으로 인식하여 클래스에서 사용 가능하다.

 

두 라이브러리의 차이점

  • Android Data Binding Library는 자바와 코틀린 둘 다 사용이 가능한 '데이터 바인딩' 라이브러리입니다. XML에서 직접 레이아웃의 뷰 안에 어떤 클래스의 데이터를 셋팅할 것인지 <data> 태그를 통해 설정할 수 있습니다.
  •  KTX는 당연하게도 코틀린 확장 라이브러리기 때문에 코틀린에서만 사용 가능한 기법입니다. 대신 코틀린과 KTX의 기법을 통해 (@parcelize annotation라던지) 보일러 코드가 없도록 만들 수 있습니다.

 

 

 

 

 이에 대해 구글에서는 Android Data Binding을 사용하기를 권고하는 것으로 여겨집니다. 이유는 코틀린에서만 사용이 가능하고, Nullability를 노출하지 않는 등이 있다고 합니다. 관련된 아티클은 다음 링크를 보시면 좋을 것 같습니다.

 

 

The Argument Over Kotlin Synthetics

It all started with a commit message

proandroiddev.com

 

 

 

 

 

Reference

 

 

Data Binding in Android

How to use the Android Data Binding Library to build apps faster and easier, with powerful declarative layouts and minimum code.

www.androidauthority.com

 

Android Data Binding – Example

In this tutorial lets implement Data Binding in a Android Application. Data Binding support was added to Android last year

www.learn2crack.com

https://www.youtube.com/watch?v=u6koIr-EFi4

 

728x90

+ Recent posts