안드로이드 웹뷰에 대해서 한번 정리했었는데요.. 안드로이드 웹뷰(WebView) 사용하기 안드로이드 웹뷰에서 뒤로가기 버튼 처리 - 웹페이지 리다이렉트 경우 웹에서 액티비티 호출하기 웹뷰를 사용하다보면 카카오링크와 같이 인텐트로 외부 앱을 모바일에서 실행하는 경우가 있습니다. 폰에 내장된 브라우저에서는 잘 되는데, 안드로이드 4.4. SDK부터 Chrominum 기반으로 웹뷰가 변경되면서 웹뷰에서 인텐트를 지원하지 않는 이슈가 있습니다. 인텐트를 지원하도록 WebViewClient를 상속한 함수에서 shouldOverrideUrlLoading 메소드를 다음과 같이 수정하면 됩니다. private class MyWebViewClient extends WebViewClient { public static f..
모바일에서 많이 사용하는 탭 스타일을 구성할 때, 안드로이드 5.0이후 Material Tab Design을 추천하고 있다. 안드로이드에서 Material Design은 직관적이면서 일관된 UI/UX를 제공하는 것을 말한다. 다시 말해 UI/UX의 일관성을 위해 구글이 제시한 가이드가 바로 Material Design이다. 탭 UI/UX와 관련된 샘플을 살펴보니 프래그먼트를 활용하여 탭 사이를 빠르게 이동하고, 좌우로 스와이프(Swipe)하는 기능을 제공하고 있다. 안드로이도 예제인 SlidingTabsBasic과 SlidingTabsColors를 다운 받아서 살펴보면 이해할 수 있을 것이다. 안드로이드 탭 스타일 SlidingTabsBasic을 기반으로 안드로이드 탭 구성을 살펴보도록 하자. 기본적으로..
안드로이드에서 웹뷰를 적용하는 강좌는 지난번에 올렸었다. 뒤로가기 버튼까지 처리를 했지만, 사용하다 보면 한가지 문제가 발생한다. 웹 페이지에서 다른 페이지로 이동한 후, 내부적으로 여러번 리다이렉트가 발생할 경우이다. 이때, 기존의 방식대로 뒤로가기 버튼을 처리하면 원하는대로 동작하지 않는다. 바로 이전 페이지로 이동하기 때문에 다시 현재 보고 있는 페이지로 돌아오게 되는 것이다. 이런 문제를 해결하기 위해서 다음과 같은 방식을 사용해봤다. 현재 URL을 변수에 저장하고 새로운 URL이 로딩되었는데 아직도 현재 URL이면 뒤로 이동하도록 처리하는 것이다. WebViewClient를 상속한 클래스의 shouldOverrideUrlLoading 함수에서 처리하면 된다. private class WebVie..
대부분의 앱은 처음 시작할 때 인트로 화면을 제공한다. 아이폰에서는 기본 이미지(Default.png)를 추가하거나 설정해 주고, 앱 론칭이 끝났을 때 실행되는 함수에서 일정시간만을 주는 다음 한줄 코드로 인트로 화면이 해결된다. [NSThread sleepForTimeInterval:3]; 하지만, 안드로이드에서는 인트로를 위한 별도의 기능을 제공해 주지 않는다. 그렇다고 인트로 화면을 전혀 제공해 줄 수 없는 것은 아니다. 인트로를 위한 액티비티를 하나 만들고, 앱이 실행될 때 해당 액티비티가 먼저 뜨도록 구성하면 된다. 그리고 일정 시간이 지나면 실제 처음 나오는 액티비티가 실행되도록 하면 된다. AndroidManifest.xml 파일 설정 먼저 처음 실행하는 액티비티가 인트로 화면이 되도록 An..
안드로이드 스튜디오로 개발하는데 있어 기존 방식과 약간 다른 부분이 있어 해당 부분들을 정리해 보려고 한다. 앱 버전 및 SDK 버전 설정 예전에는 어플 버전을 설정하기 위해 manifest.xml 파일에 versionCode와 versionName을 지정하면 되었다. 또한 지원하는 안드로이드 버전을 설정하기 위해서는 use-sdk 태그에 minSdkVersion과 targetSdkVersion을 지정했다. 그러나 안드로이드 스튜디오에서 생성한 프로젝트는 아무리 manifest.xml을 수정해도 적용되지 않는다. 그 이유는 바로 Gradle Script가 우선 적용되기 때문이다. 위 그림에서 build.gradle이란 파일을 열어 보면 앱 버전이나 SDK 버전을 설정할 수 있는 스크립트가 있다. 바로 이..
최근 핫이슈들을 살펴보기 위해서 네이버, 다음의 실시간 검색어를 자주 살펴본다. 모바일에서도 포탈 사이트에 접속하지 않고 바로바로 확인하기 위한 앱들을 살펴봤는데대부분 텍스트 위주의 순위라 결국 다시 포털 사이트에 접속해서 무슨일인지 확인 해야 하는 아쉬움이 있었다. 이미지로 한번에 살펴보면 더 낫지 않을까?그리고 궁금하면 포털 사이트로 들어가면 될 것이고.. 그래서 '실시간 검색' 앱을 만들어봤다. 실시간 검색어와 이미지는 매 1분마다 업데이트하도록 구성했다. 네이버와 다음의 실시간 검색어를 아래처럼 이미지로 확인할 수 있다. 안드로이드 사용자는 구글 플레이를 통해 다음 링크를 눌러서 다운로드하면 된다. https://play.google.com/store/apps/details?id=kr.co.acr..
안드로이드에서 웹서버로 통신할 때 주로 사용하는 포맷이 JSON이다. 웹에 접속해서 데이터를 가져오는 방식은 안드로이드 네트워크 연결하기 (Network On Main Thread Exception 처리) 을 참고하기 바란다. 이렇게 가져온 데이터가 JSON 타입일 경우, 안드로이드에서 이를 처리해서 배열에 저장해 보자. 웹에서 가져온 데이터를 JSONArray로 변환하고, For문을 중첩해서 돌리면서 각 항목의 값을 가져오는 것이다. 그리고 String[][] 2차원 배열에 가져온 값을 저장하는 형태로 매우 간단하다. 소스를 한번 살펴보자. try { JSONArray jArray = new JSONArray(result); String[] jsonName = {"name","age","exam"}; ..
안드로이드에서 네트워크 연결하기 위해 자바에서처럼 코딩하면 십중팔구는 다음과 같은 오류 메시지를 만난다. android.os.NetworkOnMainThreadException 메시지를 살펴보면 Main Thread에서 네트워크를 호출하면서 발생한 오류라고 나온다. 즉, 안드로이드에서 Main Thread에서는 네트워크 연결을 하지 못하도록 한 것이다. 아마도 안드로이드 앱에서 네트워크 호출하면서 에러가 발생한 것을 사용자들이 안드로이드의 오류로 인식하기 때문에 그런 듯 하다. AsyncTask 쓰레드 클래스 이해 그럼 안드로이드에서는 어떻게 네트워크에 연결할 수 있을까? AsyncTask라는 쓰레드 클래스를 상속받아 네트워크 연결하는 부분을 만들면 된다. AsyncTask는 상속시 3개의 Generic..
웹앱을 만들다보면, 웹에서 안드로이드 앱의 특정 액티비티를 호출해야 하는 경우가 종종 발생한다. 오늘은 HTML의 링크를 클릭했을 때, 안드로이드 액티비티를 호출하는 간단한 방식을 정리해 보도록 한다. 웹뷰를 작성하는 코드는 안드로이드 웹뷰(WebView) 사용하기 를 참고하기 바란다. 이 소스에 HTML 링크를 처리하는 부분을 추가할 것이기 때문이다. 웹에서 액티비티 호출 방식 웹에서는 HTML의 태그를 활용해서 액티비티를 호출한다. Call Activity 이런 형태로 호출하고, 안드로이드 액티비티에서 URL 로딩하는 부분에서 app://로 시작하는 것을 별도로 처리하면 된다. 필요에 따라서 app:// 이후 문자열을 가지고 특정 파라미터를 전달하는 형태도 가능할 것이다. 웹 HTML 소스 간단한 테..
최근 모바일 웹을 앱으로 씌워서 서비스하는 경우가 많아짐에 따라 웹뷰의 활용성도 올라가는 것 같다. 안드로이드에서 웹뷰(WebView)를 사용하는 기본 방식을 정리해 보도록 한다. 액티비티 생성 먼저 "File > New > Activity > Blank Activity"를 통해 MiniWebActivity라는 이름의 빈 액티비티를 하나 생성한다. 생성후 살펴보면 Java에는 MiniWebActivity 파일이 Layout에는 activity_mini_web.xml 파일이 추가된다. Menu에도 menu_mini_web.xml이 생성되지만 여기에서는 사용하지 않는다. 레이아웃 설정 activity_mini_web.xml의 레이아웃 설정은 다음과 같다. LinearLayout으로 설정했고 방향(orient..