Delphi 안드로이드 웹브라우저에서 "tel:, sms:" 링크가 동작하지 않는 이슈 해결하기
2015.06.26 23:02
델파이로 하이브리드 앱 개발 시 안드로이드 환경에서 전화걸기 링크(tel:)를 클릭하면 웹페이지 오류(ERR_UNKNOWN_URL_SCHEME)가 표시됩니다.
원래는 전화걸기 기능이 실행되야 합니다.
이 글은 안드로이드 하이브리드 앱에서 웹브라우저(TWebBrowser)의 전화걸기, 문자전송 등의 링크 클릭 시 해당 기능이 동작하도록 처리하는 방법을 안내합니다.
먼저 웹페이지의 구성과 증상을 살펴봅니다.
웹페이지 구성과 증상
웹페이지(http://hjf.pe.kr/fmx/hybrid.php)에는 아래와 같이 전화걸기, 문자전송, 메일 전송 링크를 제공합니다.
1
2
3
|
< a href = "tel:021231234" >[Phone number]</ a > / < a href = "sms:01012341234" >[Send sms]</ a > / < a href = "mailto:abc@mail.com" >[Send mail]</ a > |
위 페이지를 안드로이드 앱의 웹브라우저에 표시하고, 전화걸기 링크를 클릭하면 다음과 같이 웹 페이지 오류가 표시됩니다.
위 오류가 발생하는 원인은 링크를 클릭하면 관련 액티비티가 처리해야 하는데 웹페이지로 인식해 웹브라우저가 분석하는데 실패하기 때문입니다.
그럼 링크 클릭 시 페이지 이동 대신 기능 액티비티를 표시하도록 수정해보니다.
파이어몽키 안드로이드 웹브라우저 소스 수정
위 링크 이슈를 해결하기 위해서는 파이어몽키 안드로이드 웹브라우저의 소스(FMX.WebBrowser.Android.pas)를 수정 해야합니다.(아래 과정은 델파이 XE8 기준으로 설명합니다. 다른 버전은 소스의 경로와 소스코드 내용 중 일부가 다를 수 있습니다.)
1, 안드로이드 소스코드 복사
아래 경로에서 안드로이드 웹브라우저 소스(FMX.WebBrowser.Android.pas)파일 복사합니다.
- C:\Program Files (x86)\Embarcadero\Studio\16.0\source\fmx\FMX.WebBrowser.Android.pas (XE8 기준)
프로젝트 경로에 파일을 복사한 이유는 델파이 컴파일러는 프로젝트 파일의 경로의 소스파일을 우선적으로 참고해 컴파일합니다. 위 특징을 이용해 프레임워크 소스코드를 프로젝트 파일과 같은 경로에 놓고 수정하면 수정된 내용이 적용되어 컴파일 됩니다.
2, 파이어몽키 소스코드 수정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
function TAndroidWebBrowserService . TWebBrowserListener . shouldOverrideUrlLoading( P1: JWebView; P2: JString): Boolean ; var Url: string ; Intent: JIntent; begin Url := JStringToString(P2); FWBService . ShouldStartLoading(Url); Result := False ; // 리턴값이 True이면 페이지를 랜더링하지 않음 // http 또는 https 인 경우 False(랜더링 함) // 그 외 True(렌더링 안함) 로딩을 중지 함(P1.stopLoading) Result := False else begin // tel:, sms:, mailto:, geo: 등은 해당 Activity 실행 Intent := TJIntent . JavaClass . init(TJIntent . JavaClass . ACTION_VIEW, TJnet_Uri . JavaClass . parse(P2)); try SharedActivity . startActivity(Intent); Result := True ; except end ; end ; // 렌더링 안하므로 로딩 중지 if Result then P1 . stopLoading; end ; |
3, 테스트
참고 글
- http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String)
- http://www.androes.com/119
- http://itreading.tumblr.com/post/75376699028/webview
- http://stackoverflow.com/questions/23059782/tel-and-sms-links-not-working-in-twebbrowser-within-delphi-xe5-android-app
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) | 관리자 | 2021.01.19 | 12893 |
공지 | [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) | 관리자 | 2020.11.16 | 12160 |
공지 | [10.4 시드니] What's NEW! 신기능 자세히 보기 | 관리자 | 2020.05.27 | 14635 |
공지 | RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 | 관리자 | 2018.10.23 | 19972 |
공지 | [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] | 관리자 | 2017.02.06 | 21449 |
공지 | [전체 목록] 이 달의 기술자료 & 기술레터 | 관리자 | 2017.02.06 | 17157 |
공지 | RAD스튜디오(델파이, C++빌더) - 시작하기 [1] | 관리자 | 2015.06.30 | 37190 |
공지 | RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) | 험프리 | 2014.01.16 | 172620 |
7 | 엠바카데로가 제안하는 가장 효율적인 비용으로 최신식 앱 개발 방법 | 관리자 | 2018.12.11 | 953 |
6 | 웹 영역으로의 확장을 위한 크로스-플랫폼 웹 애플리케이션 개발 방법 - Ext JS | 관리자 | 2018.12.11 | 744 |
5 | 기존 시스템을 웹(Web)으로 확장하기 위해 고려해야 할 두 가지 포인트 | 관리자 | 2018.06.11 | 1343 |
4 | 델파이/C++빌더 개발자를 위한 웹 개발 with ExtJS! | 관리자 | 2018.06.04 | 921 |
3 | RAD 스튜디오(델파이, C++빌더) 웹개발 방법(WebBroker, IntraWeb) | 험프리 | 2016.09.07 | 1738 |
2 | [하이브리드 앱 개발] 웹페이지에서 델파이 함수 호출하기 | Humphery | 2015.06.26 | 3951 |
» | 안드로이드 웹브라우저에서 "tel:, sms:" 링크가 동작하지 않는 이슈 해결하기 | Humphery | 2015.06.26 | 4676 |