728x90
반응형
안드로이드에서 웹뷰를 이용하여 다음 주소 검색 api 를 이용 하려고 하는데,
웹뷰에서는 안뜨고 php 주소를 쳐서 확인해보면 팝업형식으로 뜨면서 정상작동하는 경우를 봤을 것이다.
다음 주소검색 api의 경우 팝업으로 열리기때문에
웹쪽에서 iframe으로 처리를 하거나,
안드로이드에서 웹뷰가 팝업으로 실행되게 처리해야한다.
나는 웹 쪽 iframe으로 처리하는 방법을 선택했다.
< 안드로이드 >
public class MainActivity extends AppCompatActivity {
private WebView webView;
private TextView result;
private Handler handler;
Context context;
Activity activity;
Dialog dialog1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
activity =this;
result = (TextView) findViewById(R.id.result);
webView = (WebView) findViewById(R.id.webView);
// 핸들러를 통한 JavaScript 이벤트 반응
handler = new Handler();
result.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// WebView 초기화
init_webView();
}
});
}
@SuppressLint("SetJavaScriptEnabled")
public void init_webView() {
// WebView 설정
// JavaScript 허용
webView.getSettings().setJavaScriptEnabled(true);
// JavaScript의 window.open 허용
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
// JavaScript이벤트에 대응할 함수를 정의 한 클래스를 붙여줌
webView.addJavascriptInterface(new AndroidBridge(), "TestApp");
// web client 를 chrome 으로 설정
webView.setWebChromeClient(new WebChromeClient());
// webview url load
webView.loadUrl("http://192.168.0.4:80/search_navi_address.php");
}
public 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를 초기화 하지않으면 재사용할 수 없음
Log.d("@@@@",String.format("(%s) %s %s", arg1, arg2, arg3));
init_webView();
}
});
}
}
}
< 웹 php >
<?php
header("Content-Type: text/html; charset=UTF-8");
?>
<div id="wrap" style="display:none;border:1px solid;width:400px;height:300px;margin:5px 0;position:relative">
<img src="//t1.daumcdn.net/postcode/resource/images/close.png" id="btnFoldWrap" style="cursor:pointer;position:absolute;right:0px;top:-1px;z-index:1" onclick="foldDaumPostcode()" alt="접기 버튼">
</div>
<script src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script>
// 우편번호 찾기 찾기 화면을 넣을 element
var element_wrap = document.getElementById('wrap');
element_wrap.style.display = 'block';
var currentScroll = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
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);
}
// iframe을 넣은 element를 안보이게 한다.
// (autoClose:false 기능을 이용한다면, 아래 코드를 제거해야 화면에서 사라지지 않는다.)
element_wrap.style.display = 'none';
// 우편번호 찾기 화면이 보이기 이전으로 scroll 위치를 되돌린다.
document.body.scrollTop = currentScroll;
},
// 우편번호 찾기 화면 크기가 조정되었을때 실행할 코드를 작성하는 부분. iframe을 넣은 element의 높이값을 조정한다.
onresize : function(size) {
element_wrap.style.height = size.height+'px';
},
width : '100%',
height : '100%'
}).embed(element_wrap);
</script>
728x90
반응형
'개인 공부' 카테고리의 다른 글
용어 정리 모음 (0) | 2019.12.30 |
---|---|
(스크랩 ) json 사용하기 (0) | 2019.10.28 |
안드로이드 뷰페이저 + 탭레이아웃 정리 블로그 (0) | 2019.10.12 |
MVVM 패턴 ( 데이터 바인딩 )예제 1 (0) | 2019.09.23 |
레거시 코드 (Legacy Code) (0) | 2019.06.12 |