라벨이 [Mobile]인 게시물 표시

android Webivew에서 새창 띄우기

Webview를 연동시 일반적인 페이지 이동이 아닌 새창이 띄워져야 하는데 아무동작이 없어 당황 스러울때가 있습니다. android에서는 새창으로 띄워지는 동작은 따로 처리가 필요합니다. 기본적으로는 위와같이 새창이 띄워져야 하는경우 WebChromeClien의 onCreateWindow함수가 호출 됩니다. 함수가 호출 되면 새창과 관련 동작을 추가 해주면 아무동작이 없어 당황스러운 상황은 쉽게 해결 됩니다. webview = ( WebView ) findViewById ( R . id . webview ) ; WebSettings settings = webview . getSettings ( ) ; settings . setJavaScriptEnabled ( true ) ; settings . setSupportMultipleWindows ( true ) ; settings . setJavaScriptCanOpenWindowsAutomatically ( true ) ; 웹뷰셋팅을 해줍니다. webview.setWebChromeClient(new WebChromeClient() { @ Override public boolean onCreateWindow ( final WebView view , boolean dialog ,                                                                       boolean userGesture , Message resultMsg ) { WebView newWebView = new WebView ( MainActivity . this ) ; WebView . WebViewTransport transport                 

android 5.0 이상 웹뷰에서 파일 업로드 하기

웹페이지에서 사진이나 문서등 다양한 형식의 첨부파일을 업로드하는 기능이 구현 되어있는 곳이 많습니다. 하지만 android 웹뷰에서 첨부파일 업로드 기능은 추가 구현을 해주어야 동작을 합니다. 5.0 이전과 이후 버전에서 이 기능의 구현 방법은 다른데요. 오늘은 5.0 이상 버전에서 어떻게 구현 하는지 알아볼까 합니다.   < uses - permission android : name = " android.permission.READ_EXTERNAL_STORAGE " / > manifest 파일에 권한을 추가 합니다. private ValueCallback<Uri[]> mFilePathCallback ; WebChromeClient webChromeClient = new WebChromeClient() { // For Android Version 5.0+ public boolean onShowFileChooser ( WebView webView , ValueCallback < Uri [ ] > filePathCallback , FileChooserParams fileChooserParams ) { if ( mFilePathCallback ! = null ) { mFilePathCallback . onReceiveValue ( null ) ; } mFilePathCallback = filePathCallback ; showImageChooser ( ) ; return true ; } } ; 업로드를 위해서 앱에서 해주어야 할 일은 간단 합니다. WebchromeClient를 통해 파일선택창이 호출 되면 파일

Intent란 무엇인가?

Intent는 안드로이드 앱 내부 혹은 외부 컴포넌트간의 호출및 정보 전달을 하는 역할을 합니다. 앱 구성요소(컴포넌트) * Activity * Service * BroadCast Receiver * Content Provider 앱의 구성요소는 위의 4가지 이며 해당 구성요소간의 호출및 정보를 전달하는데 사용하는 것이 Intent 입니다. 명시적 인텐트와 암시적 인텐트 2가지로 분류 할수 있습니다. 1. 명시적인텐트 - 호출할 대상을 지정 하여 사용 Intent intent = new Intent(context, CallActivity.class) ; startActivity(intent) ; 다른 Acitivity를 시작 하는 소스입니다. 시작할 Acitivity를 지정하여 Intent를 생성 하여 사용합니다. Intent intent = new Intent(context, MyService.class) ; startService(intent) ; 로컬서비스를 시작하는 소스입니다. (참고로 원격서비스는 바인딩하는 방식으로 구현됩니다.) Acitivity 시작하는 것과 크게 다르지 않게 Service를 지정하여 Intent를 생성하여 사용 하는 것을 알수있습니다. 2. 암시적인텐트  - 컴포넌트외의 속성(컴포넌트를 지정하면 명시적 인텐트가 된다)들로 구성하여 속성에 부합하는 컴포넌트를 실행 Intent intent = new Intent( "android.intent.action.CALL" , Uri.parse(tel)) ; startActivity(intent) ; 전화걸기를 요청 하는 소스입니다. Action값을 android.intent.action.CALL을 지정해서 Acitivity를 실행하면 디바이스내에 해당 Action값 속성을 가지고 있는 Activity를 선택할수 있는 창이 노출 됩니다. 위에 보이는 소스는

android Soket를 활용한 통신 - Server

android에서 socket을 활용하여 Server, Client를 구현하여 통신하는 법을 알아보도록 하겠습니다. 우선 Server를 만드는 일인데요. android 디바이스에서 Server를 만들기 위해서는 Wifi환경이어야 가능 합니다. public static String getLocalIpAddress(Context appContext) { WifiManager wifiMgr = ( WifiManager ) appContext . getSystemService ( WIFI_SERVICE ) ; WifiInfo wifiInfo = wifiMgr . getConnectionInfo ( ) ; int ip = wifiInfo . getIpAddress ( ) ; String ipAddress = String . format ( "%d.%d.%d.%d" , ( ip & 0xff ) , ( ip > > 8 & 0xff ) , ( ip > > 16 & 0xff ) , ( ip > > 24 & 0xff ) ) ; return ipAddress ; } Wifi환경에서 디바이스의 IP주소를 가져오는 소스입니다. Server가 직접 쓰는 것은 아니지만 Client가 Server에 접근하기 위해서는 필요 합니다. private ServerSocket serverSocket ; private void createServer() { try { isRunning = true ; serverSocket = new ServerSocket ( SERVER

android에서 Gson 라이브러리 사용하기

Json 형식은 데이터 교환방식중 가장 많이 사용 하지 않나 생각 합니다. android에서는 가장 기본적으로 JsonObject라는 클래스를 이용하여 편리하게 파싱을 할수 있습니다. 하지만 이방법도 더 편리한 방법으로 제공 하는 것이 바로 Gson입니다. Gson 라이브러리는 파싱할 클래스를 선언하고 간단한 함수 호출을 통하여 객체에 값들이 할당됩니다. compile 'com.google.code.gson:gson:x.x' build.gradle의 dependencies에 gson라이브러리를 추가 합니다. class SampleDTO { int idx ; String text ; public SampleDTO ( int idx , String text ) { this . idx = idx ; this . text = text ; } } 파싱할 클래스형태를 만들어 줍니다. Gson gson = new Gson ( ) ; SampleDTO dto = new SampleDTO ( 1 , " sample " ) ; String sJsonText1 = gson . toJson ( dto ) ; String sJsonText2 = gson . toJson ( dto , SampleDTO . class ) ; Log . d ( " gson " , " sJsonText1: " + sJsonText1 + " \n sJsonText2: " + sJsonText2 ) ; 생성한 객체를 통해 Json텍스트로 만들어 주는 형태입니다. Gson 객체와 Json텍스트로 만들어 줄 객체를 생성합니다. 데이터 객체를 텍스트로 만들어 주기 위한 함수 toJson을 사용합니다.

[오픈 API] 앱 다운로드 순위를 가져오자 3부 (모바일앱 구현)

이미지
[오픈 API] 앱 다운로드 순위를 가져오자 1부 (AppApnnie Api) [오픈 API] 앱 다운로드 순위를 가져오자 2부 (모바일 앱 설계) [오픈 API] 앱 다운로드 순위를 가져오자 3부 (모바일 앱 구현) 마지막 시간으로 지난시간에 설계한 부분을 구현하도록 하겠습니다. BaseViewController 생성 AuthViewController 클래스 ProductViewController 클래스 SalesViewController 클래스 ==============================================================================1. BaseViewController는 ViewController에서 자주 사용할 함수들을 정의할 부모 컨트롤러 입니다. API를 http로 호출하고 받는 함수들을 정의하면, 각각의 ViewController에서 구현하지 않아도 됩니다. requestUrlGet() :  AFNetworking를 이용하여, get방식으로 호출하는 함수입니다. receiveAPI ()  :  AFNetworking를 이용하여, get방식으로 호출한 후 받는 함수 입니다. requestUrlGet 함수에서 파라미터와 주소를 호출하면, 받은 결과를 노티피케이션 객체를 생성, 등록하고,  receiveAPI에 노티피케이션 객체를 해지해줍니다. ============================================================================= - ( void )requestUrlGet:( NSString *)urlString parameters:( NSDictionary *)parameters className:( NSString *)className apiName:( NSString *)apiName {     [[ NSNotificationCenter defaultCenter ] addO