Android

( 스크랩 ) 안드로이드 다음 주소검색 api

Machine_웅 2019. 10. 7. 18:12
728x90
반응형

결과물

 

퍼미션 추가

<uses-permission android:name="android.permission.INTERNET"/>

 

Layout 소스 코드

xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:weightSum="5"

tools:context="org.codeman77.daumaddressapiex.MainActivity">




<WebView

android:id="@+id/webView"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="4" />




<TextView

android:id="@+id/result"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:gravity="center"

android:text="Result" />

LinearLayout>

 

Activity 소스 코드

package org.codeman77.daumaddressapiex;

 

import android.os.Bundle;

import android.os.Handler;

import android.support.v7.app.AppCompatActivity;

import android.webkit.JavascriptInterface;

import android.webkit.WebChromeClient;

import android.webkit.WebView;

import android.widget.TextView;

 

public class MainActivity extends AppCompatActivity {

 

    private WebView webView;

    private TextView result;

    private Handler handler;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        result = (TextView) findViewById(R.id.result);

 

        // WebView 초기화

        init_webView();

 

        // 핸들러를 통한 JavaScript 이벤트 반응

        handler = new Handler();

    }

 

    public void init_webView() {

        // WebView 설정

        webView = (WebView) findViewById(R.id.webView);

        // JavaScript 허용

        webView.getSettings().setJavaScriptEnabled(true);

        // JavaScript의 window.open 허용

        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

        // JavaScript이벤트에 대응할 함수를 정의 한 클래스를 붙여줌

        // 두 번째 파라미터는 사용될 php에도 동일하게 사용해야함

        webView.addJavascriptInterface(new AndroidBridge(), "TestApp");

        // web client 를 chrome 으로 설정

        webView.setWebChromeClient(new WebChromeClient());

        // webview url load

        webView.loadUrl("http://codeman77.ivyro.net/getAddress.php");

    }

 

    private class AndroidBridge {

        @JavascriptInterface

        public void setAddress(final String arg1, final String arg2, final String arg3) {

            handler.post(new Runnable() {

                @Override

                public void run() {

                    result.setText(String.format("(%s) %s %s", arg1, arg2, arg3));

                    // WebView를 초기화 하지않으면 재사용할 수 없음

                    init_webView();

                }

            });

        }

    }

}

php 소스 코드 ( ivyro.net에 무료 호스팅 이용 )

<?php

header("Content-Type: text/html; charset=UTF-8");

?>

 

<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>

<script>

    new daum.Postcode({

        oncomplete: function(data) {

            if(data.userSelectedType=="R"){

                // userSelectedType : 검색 결과에서 사용자가 선택한 주소의 타입

                // return type : R - roadAddress, J : jibunAddress

                // TestApp 은 안드로이드에서 등록한 이름

                window.TestApp.setAddress(data.zonecode, data.roadAddress, data.buildingName);

            }

            else{

                window.TestApp.setAddress(data.zonecode, data.jibunAddress, data.buildingName);

            }        

        }

    }).open();

</script>

 

자세한 속성 값은 아래 URL 참고

http://postcode.map.daum.net/guide#attributes



출처: https://codeman77.tistory.com/55 [☆]  _  감사합니다. 꾸벅

728x90
반응형