Layout Editor (Ep 3, Android Studio)

전 코드작성을 좋아합니다 저와 비슷한 분이시라면 가장 정교한 로직의 앱을 만드는 것이 훌륭한 유저 인터페이스를 만드는 것보다 오히려 쉽게 느껴질 겁니다 디자인이 발전함에 따라 기기에서 레이아웃의 변화를 일일이 테스트 하는 일이 따분할 수 있지요 레이아웃 편집기는 안드로이드 스튜디오 내장 툴로서 APK를 실제 기기나 에뮬레이터에 배치하거나 다시 컴파일 할 필요 없이 레이아웃의 실시간 편집과 미리보기를 가능하게 해 줍니다 레이아웃 편집기는 XML 레이아웃 파일을 열 때마다 자동으로 들어옵니다 디자인 뷰는 요소들을 팔레트에서 스테이지로 끌어서 쉽게 추가하고 조종하게 해 줍니다 시각단서는 서로 연계된 뷰의 포지션을 돕는데 이때 부모 노드 클래스와 요구되는 레이아웃 변수가 고려됩니다 다른 뷰의 속성을 인스펙터에서 편집하거나 컴포넌트 트리 판에서 뷰의 계층 위치를 바꿀 수 있습니다 뷰를 설정한 후 클래스 변경을 결정할 때 쉽게 사용할 수 있는 요령이 있습니다 뷰를 오른쪽 클릭하고 원하는 요소를 모핑 메뉴에서 선택하세요 이치에 맞는 변화만을 허용하기 위해서 일정한 제한이 있다는 것을 기억해 두세요 예를 들어 선형으로 된 레이아웃은 텍스트 뷰로 모핑되지 않습니다 뷰 계층의 부분들이 다른 레이아웃에서 재사용 될 수 있는 게 보일 때마다 Extract 레이아웃이라 불리는 리팩토링이 있습니다 그것을 활성화하면 선택된 서브트리가 별도의 리소스로 들어가게 되고 현재 레이아웃으로 포함됩니다 새 파일을 편집을 위해 열면 원본 계층의 미리보기에서 아직도 그대로 있는 것을 볼 수 있습니다 안드로이드 스튜디오가 XML이 리팩토링을 시행할 때 특별한 힌트를 추가했기 때문입니다 이것을 보기 위해서는 텍스트 탭을 눌러서 XML의 편집으로 전환하세요 비주얼 편집기 대신에 코드 작업 시, 실시간으로 업데이트가 되는 라이브 프리뷰 창이 있음을 보십시오 기본 디자인 뷰 대신 코드를 보는 것을 항상 선호한다면 여기서 Prefer XML Editor 옵션을 선택하세요 위에서 언급한 렌더러에 대한 힌트는 두 부분으로 구성되어 있습니다 한 부분은 루트 XML 노드에 새로운 툴 이름 공간입니다 다른 부분은 특별한 어노테이션 세트로 실행시간에는 영향을 주지 않지만 안드로이드 스튜디오에 의해서 처리됩니다 여기에, Include 태그 자리에서 다른 레이아웃 컨텍스트에서 작업 중인 파일을 전달하는 Show In 속성을 볼 수 있습니다 이것도 유용하지만 제 생산성을 북돋아주는 다른 형태의 힌트가 또 있습니다 미리 알아두면 유용합니다 툴 이름 공간으로 프리픽스 함으로써 사실 대부분의 뷰 속성을 무시할 수 있습니다 간단해 보여도 어떻게 작용하는지 살펴보세요 리스트 뷰 같은 데이터 공급을 위한 어댑터가 필요해서 레이아웃이 블랭크 텍스트뷰가 됐던 적이 있나요? 툴 이름 공간을 사용해 더미 텍스트를 추가하고 본인의 레이아웃을 즉시 읽을 수 있게 만드세요 레이아웃의 일부가 Gone 또는 Invisible로 돼있고 실행시간 조건에 따라서만 보인다면 어떨까요? 디자인시간 tools visibility를 써서 무효화하세요 레이아웃 편집기는 환상적인 툴이고 안드로이드 스튜디오에서 사용이 가능합니다 다른 레이아웃 편집 요령이 있으시거나 자세히 알고 싶으시면 Google+커뮤니티에서 공유해주세요 안드로이드 스튜디오 데브바이트 시리즈의 다른 비디오도 확인해 보세요

Better share targets with Direct Share (Android Development Patterns S2 Ep 7)

제가 뭔가를 공유한다는 건 보통 그 순간 무언가가 정말 멋지다고 생각했기 때문이겠죠 그 말인즉, 만약 공유하는데 시간이 너무 많이 걸린다면 저는 아마 그냥 창을 닫고 공유하는 걸 포기할 것입니다

저는 조안나 스미스입니다, 여러분이 가장 싫어할 유저 타입이죠 사람들과 더 멋지게 공유하기 위해 안드로이드 마시멜로에서 새로운 기능을 소개합니다 다이렉트 쉐어 다이렉트 쉐어를 이용하면 사용자가 공유를 눌러 당신의 어플에서 공유할 대상을 설정할 수 있습니다 쉽게 말하자면 현재는 이렇습니다 언니에게 보여줄 재밌는 기사를 발견하면 공유를 누르고 당신의 어플을 선택하죠

그러면 어플이 시작됩니다 좋아요 하지만 다이렉트 쉐어를 이용하면 바로 언니를 선택할 수 있고 해당 기사가 이미 언니와의 대화창에 보내질 준비가 되어있는 상태로 어플이 켜질 것입니다 좋은 이용자 경험이란 바로 이런 거죠 공유할 대상을 설정하기 위해서는 ChooserTargetService에서 그룹을 정의하고 당신이 만든 서비스에서 OnGetChooserTargets를 시행해야 합니다

이 방법은 공유할 대상을 제안함으로써 공유를 활성화시킬 것입니다 OnGetChooserTargets가 바로 당신의 어플을 매력적으로 만들어줄 방법입니다 가장 최근의 대화창 10개를 불러들여도 되고 아니면 사용자가 가장 아끼는 사람이 누군지 알아낼 다른 방법을 제안해서 사용자의 친한 친구 목록을 대신 작성해줘도 되죠 아니면 단체 대화창 같은 특정한 대화창에서 첨부파일이 많다는 것을 알게 되면 그 대화창이 공유 대상이 되겠죠 어떻게 할 것인지는 당신에게 달려 있습니다

저희는 그냥 당신이 더 나은 어플을 만들 수 있도록 기능을 제공하는 것입니다 자, 이제 매니페스트를 업데이트해야 합니다 신규 서비스가 항상 그렇듯 이것 또한 표시해야 하는데 다른 서비스와 달리 저희는 BIND_CHOOSER_TARGET_SERVICE 허가가 있습니다 이것으로 시스템과 연동하여 암시적 인텐트와 공유 대상을 정확히 교환할 수 있습니다 물론 이 서비스를 Chooser Target Service로 적용할 인텐트 필터도 같이 말이죠

이것으로 공유를 활성활시킬 모든 준비는 끝났는데 만약 사용자가 당신의 옵션 중 하나를 선택하면 어떻게 되죠? 어플이 설치된 후에 제대로 작동을 해야 하는데 그러기 위해서는 특정 활동에 맞는 암시적 인텐트를 설정해야 합니다 그럴려면 메타 데이터가 있어야 하죠 하지만 그게 전부에요 간단하죠 당신의 어플에서 다이렉트 쉐어를 이용하고 싶으시면 저희가 제공하는 재미있는 샘플을 구경해보세요

아래에 링크가 있습니다 아니면 저희 서류를 살펴보셔도 됩니다 하지만 더 중요한 건 계속 멋진 어플을 개발해주세요 [음악 재생]

Introducing Gradle (Ep 2, Android Studio)

우즈텍 칼리킨스키:새로운 팀에 합류해서 급히 코딩을 하는 데 툴과 외부 라이브러리 준비가 오래 걸렸던 적이 있나요? 마감이 다가올 때 가장 싫은 건 프로젝트의 빌드에 시간이 걸리는 것이죠 안드로이드 스튜디오는 그래들을 기반으로 사용이 간단하고 효과적인 빌드시스템을 처음부터 생산적으로 쓰도록 해줍니다 관례를 구성보다 선호하며 이용자가 시작할 수 있게 기본값을 부여하며 라이브러리 관리, 멀티 APK 포함 지원 등 더 많은 고급사양을 허용합니다 몇 가지 예를 보여드리죠 빌드의 구성과 모든 프로젝트의 의존성은 직관적 선언형 구문을 사용한 그래들 빌드파일로 보존됩니다 이 파일들은 개발자 프로젝트의 단일소스입니다 다시말해, 여기의 모든 변화는 IDE에 자동적으로 반영되는데 예를 들어 코드의 완성은 항상 최신 프로젝트의 구성과 같습니다 나아가, 같은 개발파일은 그래들의 명령행에 사용될 수 있고 지속적인 통합서버와, 어떤 환경에서도 재생 가능한 개발을 일관되게 해 줍니다 안드로이드 이클립스를 수 년간 사용했다면 새 빌드시스템 학습이 큰 테스크일 수 있습니다 이클립스가 프로젝트를 받아들일 때 안드로이드 스튜디오는 그래들 파일을 자동생성하고 흔히 사용되는 라이브러리의 인식시에도 파일을 의존적으로 가져옵니다 앱의 기본적인 구성으로 어플리케이션ID SDK의 최소치와 대상, 버전 정보는 개발 파일의 디폴트 컨피그 섹션에 표시됩니다 프로젝트에 연관된 모든 로컬, 원격 라이브러리도 디펜던시 섹션에서 보실수 있습니다 만약 안드로이드 스튜디오가 파일을 불러올때 파일의 의존성 인식을 실패한 경우 또는 새로운 라이브러리의 추가만을 원하는 경우 Maven 검색 다이얼로그 사용하여 맞는 패키지 이름, 버전을 쉽게 찾을 수 있습니다 여전히 잘 모르겠고 단지 빨리 시작하고 싶다면 F [Compact]와 같은 유용한 라이브러리를 the Gradleplease 웹사이트에서 찾을수 있습니다 라이브러리를 만들거나 서드 파티 라이브러리를 사용할 때 또 다른 장애물은 코드와 함께하는 추가적인 안드로이드의 특정한 자원을 분배할 효율적인 방법의 부재입니다 디렉토리를 여기저기 옮기거나 자바클래스만을 포함하는 JAR파일로 제한해야만 했습니다 그래들과 함께 안드로이드 아카이브 포맷 보존파일방식, 안드로이드 아카이브 포멧 즉 AAR은 프로젝트 자원들, 자산, 분명한 목록까지 자족적인 라이브러리와 함께 발행하거나 첨부할 수 있습니다 안드로이드 스튜디오에는 라이브러리 관리 외에도 많은 것들이 있습니다 다중버전의 앱을 개발하고 이중코드와 다른 해결책에 당면 했던 적이 있나요? 그래들의 유연성과 함께라면 하나의 프로젝트에서 같은 어플리케이션으로 다양한 문서의 창조가 가능합니다 디버그하고, 기본값에 따른 개발타입을 출시하고 선택하고 싶은 취향의 제품과 함께 빌드 베리언트를 창조합니다 취향에 따른 타입과 제품의 개발은 매우 강력하고 맞춤이 가능한 컨셉입니다 예를 들어, 각각 개발된 타입으로 분리된 등록구성을 정의할 수 있고 무료와 유료 버전의 앱을 개발자가 플레이스토어에 업로드하고 싶을 때 그 전에 양측에 패키지 이름으로 알려진 어플리케이션 ID를 쉽게 무효화 할 수 있습니다 게다가 각각의 다른 타입과 취향의 문서도 각자 고유의 코드 및 자원 일부를 포함하고 이것이 메인코드 베이스와 합쳐집니다 추가권한의 명시도 가능하며 구성요소와 매니페스트 세팅의 무효도 가능한데 특정한 취향만을 원하는 경우에 한 합니다 플레이스토어에서 이 장치를 multi-APK 서포트와 함께 써서 특정한 장치의 APKs를 다른 화면밀도, CPU타입 API 레벨에 따라 창조, 발행할 수 있습니다 여기서 중요한 건 개발자의 경험이 늘어나고 사용자의 다운로드 크기가 작다는 겁니다 배리언트로 작업할 때 안드로이드 스튜디오는 현재 선택된 버전과 관련된 파일만을 프로젝트 개요에서 보여줍니다 원하는 버전으로 앱을 변경하기 위해서는 빌드 배리언트를 사용하세요 자동적으로 발생되는 모든 배리언트에 따른 개발 태스크도 그래들 사이드바에서 확인할 수 있습니다 개발하고자하는 모든 가능한 앱의 구조가 집합된 태스크를 사용하세요 보시다시피 안드로이드 스튜디오는 프로젝트의 관리에 따른 불편함을 덜어낸 현대의 강력한 개발시스템입니다 그래들의 가능성을 이제 찾아내기 시작했습니다 이 비디오에 대해 질문이 있다면 커뮤니티 Google+에 가입하세요 다음 비디오에서 곧 뵙겠습니다

Android Tips – USB Type C Android Accessories – DIY in 5 Ep 63

좋아, 이제이게 맞지 않아? 새로운 전화를받을 때마다 다시 모든 액세서리를 교체하고 싶지 않습니다! 나는 아이폰 사용자가 아니다! DIYin5에 오신 것을 환영합니다! 저는 Trisha Hershberger이고이 에피소드에서는 가장 손쉬운 USB-C 액세서리를 보여 드리겠습니다 너의 그 반짝 이는 새 전화

당신이 보는 것을 좋아한다면 가입하고 다른 다가오는 안드로이드 폰 팁을 확인하십시오 microUSB에서 USB -C 로의 변경이 실망스럽게 보일 수 있지만 장기적으로 볼 때 가치가있을 것입니다 솔직히 말해서, 액세서리가 다가 오기 전에 microUSB 년이 걸렸습니다 그 코드로 오래되고 더 큰 "miniUSB"케이블과 함께 제공되는 오늘날에도 여전히 장치가 있습니다

블레 그 그래서 우리의 반짝이는 새 휴대폰이 USB-C와 함께 나오기 시작했다고해서 모든 것을 의미하는 것은 아닙니다 우리의 시원한 액세서리의 그것은 아직 있습니다 나는 어댑터에 대해 이야기하고있다! 아마존의 USB-C에이 작은 microUSB 팩을 약 10 달러에 얻을 수 있습니다 그러면 시원한 작은 액세서리를위한 새로운 케이블을 모두 사지 않아도됩니다

그리고 안드로이드 폰이 아이폰의 길로 나아가고 우리의 사랑하는 사람을 빼앗을 때가되면 오디오 잭 다음 어댑터는 여기에서도 다룹니다 아무도 그들이 포트를 가져 갔기 때문에 완전히 새로운 헤드폰 세트를 사러 가고 싶지는 않습니다 멀리 떨어져 있고 현재는 USB-C 헤드폰 옵션이 없습니다 헤드폰 잭을 제거하는 것에 반대표를 던지 겠어 내가 말을하면, 의미한다

내 표결은 회사 번호가 아닙니다 Android 휴대 전화의 큰 장점 중 하나는 microSD를 사용할 수 있다는 것입니다 추가 스토리지로 하지만 플래시 드라이브는 어떨까요? 대부분의 최신 안드로이드 폰이 그 작은 포트를 플래시 드라이브도? 여기서 우리는 한 쪽은 USB-C를 지원하고 다른 쪽은 정상적인 USB를 지원하는 드라이브를 가지고 있습니다 PC와 휴대 전화간에 파일을 교환하려는 경우 매우 편리합니다 배터리 얘기합시다 배터리 뱅크에서 비디오를 본 적이 없다면 지금 확인해보십시오 아웃

배터리 충전 기술의 기본을 알려 줄 것입니다 여기서 언급 할 것은 휴대 전화를 충전 할 때 좋은 기회가 있다는 것입니다 배터리 뱅크의 USB-C 포트는 다른 포트를 사용하는 것보다 빠르게 충전합니다 일반적으로 USB-C 포트의 전원 출력은 다른 표준보다 빠릅니다 USB 포트 새로운 배터리 뱅크를 시장에 내놓고 있다면, 미래에 그것을 증명하고 하나는 USB-C 포트입니다

새로운 고급형 Android 휴대 전화 중 상당수는 일종의 무선 충전 기술을 제공합니다 – 그 usb C가 펑키로 간다면 훌륭한 백업입니다 -하지만 나는 빗나간 다 휴대 전화에 무선 충전 기능이 없거나 천국에없는 경우가 있습니다 귀하의 휴대 전화가 스타 벅스보다 다른 무선 요금 부과 표준을 사용하는 것을 금지합니다! 그 반짝이는 새 전화기를 던져 다른 것을 얻을 때인 것처럼 보입니다 또는

아마존에서 20 달러 미만의 가격으로 새로운 무선 충전기를 사용할 수 있습니다 그들은 모든 주요 무선 충전 표준을 지원하는 수많은 옵션을 가지고 있습니다 당신이 필요로하는 것을 골라야하고 알맞은 등급을 받았는지 확인하십시오 우리가 언급 할 마지막 액세서리는 모든 GoPro 및 droner 친구들에게 매우 편리합니다 저 밖에

여기서 우리는 USB-C 포트로 바로 밀어 넣을 수있는 microSD 리더기를 가지고 있습니다 영상을 업로드하지 않고도 소셜 미디어에 직접 업로드하려는 경우 매우 편리합니다 먼저 짐을 내리고 집으로 가져 가야합니다 이 카메라는 카메라 또는 무인기 케이스에 들어갈 수 있으므로 항상 편리하게 사용할 수 있습니다! 그 찌름이 조금 덜 바르지? 어떤 USB-C 액세서리가 아직 기다리고 계십니까? 아래 코멘트에서 알려주십시오 그리고 무선 충전이 작동하지 않는 사용자 중 한 명일 경우 스타 벅스와 왜 여기 있는지 알아 보려면이 비디오를 확인하십시오

이것이 DIYin5 에피소드의 전부입니다 내 이름은 Trisha Hershberger이고 곧 더 많은 기술 DIY를 보게 될 것입니다

How to Camera2 (Android Development Patterns S2 Ep 8)

고양이 팬케이크

팬케이크를 먹는 고양이 만약 어플에 좋은 카메라가 지원되지 않는다면 어떻게 이런 컨텐츠들을 포착할까요? 제 이름은 데이비드 이스트고, Camera2 API는 가장 뛰어난 카메라 어플을 만드는데 필요합니다 잠시 물러서서 안드로이드 카메라API 옵션의 역사를 살펴보겠습니다 사진이나 영상을 찍는 가장 단순한 옵션은 항상 카메라 인텐트였습니다 기본적으로, 귀하가 인텐트를 시작하면 사용자들은 사진을 찍기 위해 자신이 원하는 카메라 어플을 사용하죠

이 것은 이용하기 쉽지만, 사실 실력이 있는 카메라 어플에게는 그렇지 않습니다 카메라 인텐트는 주로 카메라가 주요 기능이 아니라 부가적인 어플에 사용됩니다 카메라 인텐트로는 북실북실한 고양이가 팬케이크 먹는 모습을 못찍죠 그래서 더 나은 API가 필요했습니다 카메라 API는 카메라 인텐트보다 더 많은 것을 조정할 수 있었습니다

카메라 API가 있다면, 원하는데로 카메라 뷰를 설정할 수 있었습니다, 정말 좋았죠 하지만 사진이 발전하면서 부족한 부분들이 발견됐죠, 예를 들어 압축되지 않은 이미지를 포착할 때, 혹은 프리뷰 속도가 초당 1에서 3 프레임인 새로운 하드웨어에서의 실행 등등에 있어서 문제가 있었습니다 고양이를 찍으려면 더 나은 API가 필요하죠 그래서 Camera2를 소개합니다 Camera2 API는 가장 최근에 나온 카메라API로, 가장 크고 가장 뛰어납니다

Camera2 API는 해당 디바이스 카메라의 모든 권한을 귀하에게 부여합니다 그리고 전 API의 모든 문제들도 해결됐죠 더 빠른 간격으로 사진을 찍을 수 있고, 다수의 카메라에서 프리뷰를 볼 수 있으며, 필터효과도 바로 적용할 수 있습니다 하지만, 새롭게 만든 카메라 어플에 적용하기 전에 알아야 할 것들이 있습니다 Camera2 API는 좋은 기능들을 가지고 있지만, 어플 사용자의 디바이스가 지원하지 못 할 수 있습니다

그렇기 때문에, 귀하는 어떤 디바이스가 지원 가능한지 아셔야 합니다 이 정보는 디바이스의 카메라 스펙을 살펴보면 알 수 있습니다 이 스펙은 렌즈의 방향같은 간단한 특징일 수도 있고, 얼굴 인식 모드의 여부처럼 복잡한 것일 수도 있습니다 만약 귀하의 어플이 특정 스펙 없이는 지원이 안된다면, 사용자가 어플을 다운받으려면 해당 스펙이 필요함을 명시하면 됩니다 매니페스트 파일에 사용자의 기능을 설정해놓으면 되죠

한 가지 더 중요한 것은, Camera 2API는 안드로이드 L에서 내놨기 때문에, 모든 어플을 지원하기 위해서는 다시 카메라API를 사용해야 합니다 그리고 Camera2 API는 안드로이드 서포트 라이브러리에서 지원이 아직 안되지만, 이 남성분에게 재촉하면 더 빨리 가능케 할 수 있어요 Camera2 API는 디바이스의 카메라에 대한 귀하의 책임을 증가시킵니다 그리고 더 큰 책임에는 큰 힘이 따라오죠 아마 그럴꺼에요

Camera2 API에 대해서 더 아시려면 API 레퍼런스를 살펴보세요 그리고 실제로 시행된 모델을 확인하고 싶으시면, GitHub에 원시 이미지를 포착하는 샘플 어플이 있습니다 귀하의 어플이 카메라를 사용한다면, Camera2를 사용해 가장 뛰어난 카메라를 제공하세요 계속 좋은 어플을 개발해주세요

Runtime Permissions in Android 6.0 Marshmallow (Android Development Patterns Ep 3)

안녕하세요, 여러분 저는 조애나 스미스입니다 여기는 안드로이드 개발 패턴이며 여러분에게 안드로이드 마쉬멜로우의 새로운 런타임 승인 모델에 대해서 보여드릴 것입니다

그럼 살펴보도록 하죠 14개의 다른 승인을 요청하는 앱을 설치하는 것은 꽤 겁이날 수 있습니다 하지만 여러분의 앱이 안드로이드 마쉬멜로우를 목표로 삼고 있다면 설치시점 대신에 런타임시점에서 승인을 하도록 사용자를 유도할 수 있습니다 이제는 다행히도 이렇게 무서운 설치 다이얼로그를 피할 수 있습니다 왜냐하면 런타임 승인은 마쉬멜로우를 목표로 하는 모든 앱에 요구되기 때문이죠

따라서 여러분이 끔찍한 런타임 예외를 피할 수 있도록 도와주는 몇 가지 추가적인 단계가 존재합니다 이건 모두에게 일어날 수 있는 일이니까요 먼저, 플랫폼을 확인하세요 런타임 승인은 본래의 설치 시점 요청으로 복귀함으로써 이전 SDK들과 호환이 됩니다 그러니 사용자가 이전 SDK를 사용하고 있다면 앱이 설치될 때 승인이 주어진다는 걸 알 수 있습니다

하지만 사용자가 마쉬멜로우 사용자라면 여러분은 확신하기 힘들 것입니다 그래서 두 번째 단계를 진행해야 합니다 승인 상태를 확인하는 겁니다 여러분이 관심을 갖는 승인을 위해 checkSelfPermission을 간단히 호출하는 것은 여러분이 그 승인이 부여되었는지 알도록 해 줄 것입니다 승인이 되었다면 계속 진행하면 됩니다

하지만 승인되지 않았다면 요청을 해야 할 겁니다 사용자는 이제 승인을 취소할 수 있으므로 이걸 매번 확인해야 한다는 것을 기억하시길 바랍니다 이는 궁극적으로 개발자들에게 매우 좋은 일입니다 해야 할 일이 늘어난다고 해도 말이죠 왜냐하면 사용자들에게 타당한 이유와 이득을 제공하는 문구로 승인에 대한 요청을 사용자들이 받기 때문입니다 그리고 이것은 사용자들에게 신뢰감을 형성합니다

사용자들이 특정한 부분을 거절할 수 있도록 하면서 여러분을 더욱 좋아하게 만들 수도 있습니다 그 다음 단계로 진행해보겠습니다 아직 승인을 얻지 못했다면 그러한 승인이 필요한 이유에 대해서 설명해야 할 수 있습니다 그 리소스에 대한 접근을 허용해준다면 이 기능이 얼마나 좋을지 사용자에게 납득시키는 것입니다 이를 돕기 위해서 shouldShowReques tPermissionRationale 메소드가 있습니다 이것은 여러분이 설명할 필요가 있는지 알 수 있도록 여러분을 도와줄 것입니다

만약 사용자가 더 이상 묻지 않기를 요청하거나 장치에서 승인이 비활성화가 되면 메소드는 false를 반환합니다 만약 사용자가 이전에 승인을 거절했지만 이제는 접근을 할 수 있도록 허용한다면 메소드는 true를 반환할 것입니다 이것은 앱의 행위에 대해 사용자가 혼란을 느낄 수 있다는 신호이기 때문에 확실하게 해야 합니다 이것으로 여러분은 승인을 요청할 준비가 된 것입니다 requestPermissions 메소드는 여러분이 관심을 갖는 승인 목록과 요청 코드를 필요로 합니다

이 비동기식 호출은 사용자에게 다이얼로그를 띄우고 사용자의 응답은 여러분의 콜백함수를 실행시킵니다 그래서 여러분이 명시한 요청 코드가 중요한 것입니다 이것은 앱상에서 사용자가 어디에 있는지 그리고 앱의 행위를 고르는 방법을 확인하도록 도와줍니다 마지막 단계를 보겠습니다 승인 결과를 처리하는 것입니다 onRequestPermissionsResult에서 여러분은 호출의 결과를 확인할 수 있습니다

그래서 승인이 되면 API 호출을 만들고 사용자를 위한 마법과도 같은 순간을 생성하는 것으로 돌아올 수 있도록 요청 코드를 사용할 수 있습니다 하지만 승인되지 않았으면 우아하게 실패해야겠죠 가장 쉬운 해결책은 분명한 시각적 신호로 이 기능을 비활성화하는 것입니다 이것이 승인의 이유이기 때문이죠 그래서 여러분은 다이얼로그를 표시하거나 UI 텍스트를 업데이트 할 수 있습니다

하지만 여러분은 아마도 UI 레이아웃을 실용적으로 유지하고 싶으실 겁니다 사용자가 마음을 바꿀 수도 있으니까요 그러므로 버튼을 비활성화 하지 마시길 바랍니다 사용자들이 필요할 때 이 단계로 돌아올 수 있도록 말입니다 이것이 바로 여러분이 마쉬멜로우에서 런타임 승인을 다루도록 여러분의 앱을 업데이트 하는 방법입니다

마지막 조언은 이러한 변경을 테스트하는 것에 관한 것입니다 여러분의 앱과 설정 앱 사이를 계속해서 왔다 갔다 하는 것은 재미가 없기 때문이죠 PackageManager의 부여 명령을 확인하시기 바랍니다 여러분의 장치에서 프로그램에 따라서 승인을 부여하고 취소하도록 말이죠 그리고 늘 그렇듯이 시작 문서를 확인하시길 바랍니다

그리고 이런 변화가 사용자들이 앱의 행동에 대한 이해를 돕도록 의도되었음을 명심하시기 바랍니다 그리고 한번에 여러가지 승인을 요구함으로써 사용자들을 어쩔 줄 모르게 하지 마십시요 이러한 요청을 문구에 넣으시고 더 좋은 앱을 만드세요 [음악 재생]

Media Playback with MediaSessionCompat (Android Development Patterns Ep 4)

여러분의 음악을 정지시키는 것과 같은 기능은 먼 얘기가 아닙니다 안드로이드는 이를 위한 여러 방법을 제공해왔죠 몇 가지 얘기하자면 화면 제어 잠금과 알림을 위한 미디어 제어 그리고 안드로이드 웨어, 그리고 심지어 안드로이드 오토도 있습니다 이렇게 좋은 기능을 여러분의 오디오 앱에서 어떻게 사용해야 할까요? MediaSessionCompat를 사용하면 간단합니다 여러분을 위하여 안드로이드와 통합된 많은 작업을 할 수 있는 안드로이드 지원 라이브러리를 통하여 하나의 API를 이용할 수 있습니다 저는 이안 레이크입니다 이제 MediaSessionCompat를 살펴보고 여러분의 미디어 메타데이터를 가지고 어디에서든지 제어할 수 있는 방법을 알아볼 것입니다 여러분의 미디어 재생의 대표로서 미디어 세션을 생각해 보시길 바랍니다 오디오, 비디오 심지어 구글 캐스트에서 먼 거리로 재생하더라도 시스템에 여러분이 하는 걸 알려주지 않으면 도움을 줄 수 없습니다 하지만 여러분을 도울 수 있는 많은 방법을 제공합니다 앨범아트와 아티스트 이름과 같은 메타데이터를 게시한다면 여러분이 지원하는 재생과 일시중지와 같은 미디어 제어를 알려줍니다 하지만 이에 대해 다루기에 앞서 시작을 제어하기 위해 MediaSessionCompat 객체를 생성해봅시다 또한, 롤리팝 이전에 안드로이드 버전에서 미디어 버튼 수신기를 생성하는 하나의 예비 단계가 필요합니다 블루투스 헤드셋과 안드로이드 웨어에서 미디어 제어를 제공하며 안드로이드 50 이전의 장치에서 여러분의 앱으로 전달할 수 있습니다 단순한 브로드캐스트 수신기입니다 이렇게 매니페스트에 등록하고 여러분의 앱을 위한 액션으로 수신 키 이벤트를 변형시킵니다 일반적으로, 실제로 일시 정지를 이동시키고 재생 명령을 여러분의 미디어 재생을 제어할 수 있는 서비스로 보내는 것입니다 예시로 우리의 훈련 문서를 보겠습니다 자, MediaSessionCompat가 있습니다 컨텍스트가 필요한데요 디버깅 태그로 제공되는 문자열과 여러분의 미디어 버튼 수신기의 구성요소 이름입니다 마지막 널은 대기중인 인텐트입니다 안드로이드 4

3에 있는 구성요소의 이름 대신에 사용할 수 있습니다 이렇게 생성되는데, 널을 통과하게 되면 일반적으로 올바르게 작동되는 것입니다 더 진행하기에 앞서서 세 가지를 해야 할 겁니다 적절한 플래그를 설정해야 합니다 미디어 버튼 제어가 있는데요 이러한 미디어 버튼 이벤트를 우리의 앱으로 보냅니다 그 다음, 콜백을 설정합니다 롤리팝과 더 높은 장치가 콜백을 사용하여 버튼을 눌렀을 때 재생, 일시 정지 그리고 다른 작동을 할 것입니다 마지막으로 무언가를 재생할 때 활성화할 세션을 설정합니다 여러분의 앱에서 미디어 버튼 경로와 다른 제어가 있는 시스템의 신호입니다 자, 플럼빙이 설정되었고 작동될 준비가 되었습니다 하지만 우리의 미디어 세션이 미디어를 재생시킬 수 있는지는 아직 모릅니다 어떤 것이 재생되고 어떤 제어를 지원하는지 알 수 있을까요? 첫 번째 부분은 MediaMetadataCompat에서 처리됩니다 이는 빌더 패턴을 사용하며 여러분은 가지고 있는 모든 정보를 추가할 수 있습니다 그 다음에 여러분의 미디어 세션에서 setMetadata를 호출합니다 하지만 여전히 미디어 제어가 없습니다 우리가 아직 다른 부분을 처리하기 않았기 때문입니다 재생 상태를 게시하지 않았기 때문이죠 PlaybackStateCompat은 두 개의 목적을 가지고 있습니다 setState 메소드를 통하여 설정된 재생과 일시 중지 또는 버퍼링과 같은 현재의 상태와 setActions 메소드를 통해 설정된 중지 또는 일시 정지, 재생 정지와 같은 현재의 액션이 있습니다 이러한 두 가지를 포함합니다 일반적으로 액션은 상태와 동시에 변경되기 때문입니다 중지 상태는 일시 정지 액션을 가지고 있지 않을 것입니다 예를 들면 말입니다 MediaSessionCompat이 작동되기에 충분합니다 통합된 미디어와 모든 API 8과 더 높은 장치, 그리고 아이스크림 샌드위치, 젤리 빈, 그리고 킷캣 장치를 위한 잠금 화면 제어의 블루투스 버튼을 보실 수 있을 겁니다 MediaSessionCompat이 NotificationCompat과 API14 그리고 더 높은 장치에서 특히 인라인 미디어 제어를 포함한 모든 API 레벨에서 여러분에게 훌륭한 미디어 알림을 제공하는 AppCompat 지원 라이브러리에 속한 MediaStyle과 잘 작동되고 있는 것도 보실 수 있을 겁니다 여러분의 미디어 세션에서 특별히 독특한 미디어 세션 토큰이 있는 SetMediaSession를 호출하는 것만 기억하시면 됩니다 이를 통하여 안드로이드 웨어에 미디어 세션을 연결시킵니다 그리고 안드로이드 50과 더 높은 장치를 위한 웨어의 미디어 제어를 제공합니다 미디어 세션을 완료했을 때 배포를 하는 것을 잊지 마시길 바랍니다 정말로, 잊지 마시길 바랍니다 아직 MediaSessionCompat에 대해서만 다뤄 봤습니다 미디어 브라우저 또는 미디어 컨트롤러나 미디어 세션의 상단에 만들 수 있는 전체 호스트를 아직 다루지는 않았습니다 하지만 이로 인해서 여러분이 시작할 수 있을 겁니다 여러분의 미디어 재생 정보와 재생 제어를 어디에서나 재생할 수 있습니다 MediaSessionCompat를 사용하여 여러분의 멋진 미디어를 볼 수 있기를 기대하고 있으며 여러분이 더 나은 앱을 가질 수 있도록 도움이 되었기를 바랍니다 그리고 배포하시길 바랍니다

Tabs and ViewPager (Android Development Patterns Ep 9)

안드로이드 개발 패턴에 오신 것을 환영합니다 저희는 여러분이 더 나은 앱을 만들 수 있도록 하는데요 저는 이안 레이크입니다 시작해보겠습니다 앱에서 이동하는 방법을 생각해보시길 바랍니다 패런트뷰 (Parent View)에서 상세보기로 이동하거나 시블링뷰 (Sibling View) 사이를 이동할 수 있습니다 여기에서 탭과 뷰페이져(ViewPagers)가 필요합니다 뷰페이저가 무엇일까요? 이로 인하여 콘텐츠가 있는 다양한 페이지 사이를 스와이프하는 것을 제어할 수 있습니다 뷰페이저는 페이저어댑터에서 콘텐츠를 가져옵니다 이건 각각의 페이지나 전체 프래그먼트를 위한 일반적 보기가 될 수 있는데요 FragmentPagerAdapter나 FragmentStatePaferAdapter를사용하고 계신다면 FragmentStatePaferAdapter는 모든 프래그먼트를 유지시키고 메모리에서 생성되어, 이미 로드 된 탭 사이를 전환하는 걸 더 가볍고 빠르게 만듭니다 하지만, 메모리 측면에서 보면 무게가 있는 편입니다 많은 개수의 프래그먼트를 가지고 있다면 말입니다 FragmentStatePagerAdapter과 같은 것은 필요에 따라 프래그먼트를 제거하고 다시 생성하면서 해결하여 오로지 상태를 유지합니다 PageAdaptor에는 많은 것들이 있지는 않습니다 여러분이 가지고 있는 페이지의 수로 반환하기 위해서 getCount를 치환해야 합니다 FragmentPagerAdapter의 경우에 getItem을 실행해야 합니다 그러면 각각의 위치에 연결된 프래그먼트가 반환될 것입니다 여기에서는 각각의 위치를 위한 오른쪽 프래그먼트를 선택하여 간단한 switch statement을 해보겠습니다 하지만 여러분이 원하는 접근법을 사용하셔도 괜찮습니다 여기에서 치환해야 할 또 다른 것은 각각의 페이지에 적혀있는 문자열을 반환하는 getPageTitle입니다 페이지에 제목이 왜 필요할까요? 여러분의 뷰페이저에 연결된 몇 가지 탭을 가지기를 원하면 이러한 페이지 제목이 정말로 유용할 것입니다 탭은 모든 페이지를 끝까지 보지 않더라도 사용자들이 페이지에 있는 것들을 쉽게 볼 수 있도록 합니다 이를 통하여 사용자들은 탭을 선택하여 페이지 사이를 건너뛸 수도 있습니다 안드로이드 디자인 지원 라이브러리에 속한 탭레이아웃 클래스는 모든 머티리얼 디자인을 사용하여 탭을 실행하기 쉽도록 만들어 줍니다 그리고 이전 버전인 안드로이드 21까지 호환이 됩니다 전부 다같이 다뤄보겠습니다 먼저 뷰페이저를 setAdapter를 사용하여 페이저어댑터에 연결시켜야 합니다 그 다음에 탭레이아웃을 연결하는 것은 setupWithViewPager 하나의 방법입니다 이를 통해서, 페이저어댑터의 제목에서 탭을 만들 수 있습니다 그러면 페이지를 스와이프 하면서 탭을 변경하고 탭을 선택하면 페이지가 변경될 것입니다, 예상했듯이요 디자인 라이브러리를 추가하여 탭레이아웃과 뷰페이저를 시작해보시길 바랍니다 디자인 가이드라인과 상세한 훈련 문서를 확인하시는 것도 잊지 마시길 바랍니다 안드로이드 개발 패턴에 함께해주셔서 감사합니다 탭과 뷰페이저를 사용하여 더 나은 앱을 만드시길 바랍니다

Providing Search with SearchView (Android Development Patterns Ep 7)

많은 사람들이 여러분의 앱을 사용하고 찾으려면 두 가지 중 하나의 방법으로 분류해야 하는데요 사람들이 콘텐츠를 둘러보면서 찾던지 특정한 콘텐츠를 직접 검색해야 합니다 여러분의 앱이 좋은 인앱 검색을 제공하지 않는다면 사용자 기반의 일부에게만 서비스를 제공하고 있는 것입니다 안녕하세요 저는 이안 레이크입니다 오늘 저는 여러분에게 사용자들이 원하는 콘텐츠를 최대한 쉽고 정확하게 찾을 수 있도록 하는 서치뷰를 사용하여 훌륭한 인앱 검색을 만드는 법을 알려드릴 것입니다 좋은 검색을 제공하는 구성 요소는 가장 힘들 수도 있지만 좋은 콘텐츠에서 시작됩니다 하나의 검색 문자열을 사용하여 검색하는 것입니다 그러한 지도를 사용자의 목록이나 게시물의 전 텍스트 검색을 여러분의 데이터에 두고 데이터를 저장하는 방법은 모두 여러분에게 달려 있습니다 특별한 전 텍스트 검색(FTS)을 장치에 있는 테이블에 부분적으로 사용하는 게 도움이 될 수 있습니다 여러분의 데이터 세트가 충분히 작다면 검색 속도가 굉장히 중요합니다 지금은 검색 과정에만 집중하도록 하겠습니다 검색이 핵심적인 패턴이면 검색을 제공하기 위한 하나의 패턴을 표준화하는 게 좋겠죠 안드로이드에서는 서치뷰라고 적절한 이름을 가진 기능이 있습니다 일반적으로 서치뷰는 메인 앱, 바 또는 적절한 툴바에서 액션으로 여겨집니다 서치뷰 아이콘을 클릭하면 서치뷰는 인 라인으로 확장하여 사용자들이 즉시 검색할 수 있습니다 안드로이드 지원 라이브러리에 속한 AppCompat을 통하여 서치뷰를 모든 안드로이드 21과 더 높은 장치에서 사용할 수 있습니다 여러분의 앱 바로 안드로이드를 설치하는 것은 여러분이 추가하는 메뉴에 또 다른 항목을 추가하는 것입니다 눈에 띄는 제목과 아이콘 외에도 showAsAction에 collapseActionView가 있는 게 보이실 겁니다 이 항목은 메뉴가 기본값으로 정리되어야 하지만 정의된 showAsAction로 확장될 수 있다는 것을 나타냅니다 또한 showAsAction을 위해서 ifRoom이나 다른 대안이 필요합니다 그게 없다면 아이콘은 오버플로우 메뉴에서만 나타날 것입니다 그리고 이걸 완전한 서치뷰로 확장할 수도 없습니다 우리가 원하던 바가 아니죠 이걸 추가하여 우리는 서치뷰로 확장할 수 있는 멋진 검색 아이콘을 만들 수 있습니다 하지만 검색이 이동하거나 무언가를 하는 것은 아니에요 우리의 메뉴에 추가가 되었을 때 참조를 얻을 수 있지만 그 다음은 어떻게 해야 할까요? 먼저, setOnQueryTextListener를 사용하는 완전 수동 모드가 있어요 검색 텍스트가 변경되거나 사용자가 검색할 것을 입력하면 진행되는 것들과 시기를 정확하게 제어할 수 있도록 하는 콜백을 사용할 수 있습니다 검색이 가능한 구성을 제공하는 것보다 더 많은 기능을 이용할 수 있습니다 이것은 XML파일입니다 검색에 관련된 모든 다양한 옵션을 위한 것이죠 완전한 문서 페이지를 위한 많은 옵션들이 있습니다 상세한 설명이 있으며 전체적으로 9페이지나 되는 다양한 옵션이 있죠 다행히도, 이걸 정말로 짧고 쉽게 만들 수도 있습니다 일반적으로 여러분의 앱 이름이 되는 라벨과 검색 포스트의 형태의 힌트나 여러분의 앱 이름의 검색만 있어도 됩니다 여러분의 서치뷰에 음성검색을 추가하려면 어떻게 해야 할까요? 여러분의 검색 가능한 설정에 하나의 라인만 추가하면 됩니다 꽤 강력한 라인이지만 음성검색은 들리는 것을 바로 검색한다는 것을 기억하시길 바랍니다 검색할 때 변경할 수 없는 것입니다 그래서 음성검색을 활성화 하기 전에 검색할 것을 확인해야 합니다 그러면 검색 가능한 설정을 액티비티와 연결시킬 것입니다 사용자가 검색을 입력할 때 이러한 액티비티를 이용할 수 있겠죠 여기에서 우리는 singleTop 런치 모드를 사용했는데요 두 번째 검색과 같이 검색 가능한 액티비티에서 서치뷰를 사용하는 것이 중요하기 때문입니다 이러한 런치모드는 검색 결과 화면에서 잠재적으로 큰 백 스택을 막을 수 있으니까요 SearchManager를 사용하는 검색 가능한 설정에 서치뷰를 연결시키면 여러분의 액티비티에 추가된 메타데이터요소를 분석하는 시스템 서비스가 여러분의 서치뷰로 통과할 수 있는 검색 가능한 정보를 생성합니다 이로 인하여 우리의 검색 가능한 액티비티가 작동될 것입니다 실제 검색 텍스트를 가져올 때 우리는 액션을 검색하고 인텐트에서 추가적인 검색을 가져올 수 있습니다 이것은 onCreate로 불리며 singleTop 런치 모드를 사용하신다면 onNewIntent에서도 호출할 수 있습니다 이제 여러분에게는 훌륭한 서치뷰가 생겼습니다 우리가 선택한 액티비티를 곧바로 선택할 수 있습니다 최근의 검색 제안이나 사용자들이 원하는 것을 더욱 쉽게 찾을 수 있는 커스텀 제안에 대해서 말씀 드리지 않았는데요 개발자 사이트에서 더 많은 정보를 보시길 바랍니다 더 나은 앱을 만들기 위해 여러분이 생각해내는 훌륭한 서비스들이 정말로 기대됩니다