테스트 사이트 - 개발 중인 베타 버전입니다

안드로이드 웹뷰?쪽도 아시는분 채택완료

8년 전 조회 4,692

안녕하세요 질문좀 드리고자합니다.

이번에 웹뷰로 하나 어플을 만들었는데요

 

이미지

 

이런식으로 웹에서는 작업을했는데요 

 그냥 인터넷에서는 잘되는데 웹뷰에서는 

 

다음 이유로 tel:010-1111-5570의 웹페이지를 로드할 수 없습니다

 

라고나옵니다 ㅠㅠ

구글링 해도 방법을 잘모르겟고

아래링크  설명좀 해주시면 감사하곗습니다

http://frog-rammer.blogspot.kr/2014/07/web-view.html">http://frog-rammer.blogspot.kr/2014/07/web-view.html 

 

다 넣었는데 안됩니다 ㅠㅠ

 

AndroidManifest.xml 부분 

</span></p><pre style="background-color: rgb(255, 255, 255); font-family: 굴림체; font-size: 9.6pt;"><span style="font-style:italic;"><?</span><span style="color:#0000ff;font-weight:bold;">xml version=</span><span style="color:#008000;font-weight:bold;">"1.0" </span><span style="color:#0000ff;font-weight:bold;">encoding=</span><span style="color:#008000;font-weight:bold;">"utf-8"</span><span style="font-style:italic;">?>
</span><<span style="color:#000080;font-weight:bold;">manifest </span><span style="color:#0000ff;font-weight:bold;">xmlns:</span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">=</span><span style="color:#008000;font-weight:bold;">"<a href="http://schemas.android.com/apk/res/android" target="_blank" rel="noopener noreferrer">http://schemas.android.com/apk/res/android</a>"
</span><span style="color:#008000;font-weight:bold;">    </span><span style="color:#0000ff;font-weight:bold;">package=</span><span style="color:#008000;font-weight:bold;">"com.mobile3cm.alex.webview"</span>>
    <<span style="color:#000080;font-weight:bold;">uses-permission </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:name=</span><span style="color:#008000;font-weight:bold;">"android.permission.INTERNET" </span>/>
    <<span style="color:#000080;font-weight:bold;">uses-permission </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:name=</span><span style="color:#008000;font-weight:bold;">"android.permission.READ_EXTERNAL_STORAGE" </span>/>
    <<span style="color:#000080;font-weight:bold;">uses-permission </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:name=</span><span style="color:#008000;font-weight:bold;">"android.permission.CALL_PHONE"</span>/>
    <<span style="color:#000080;font-weight:bold;">application
</span><span style="color:#000080;font-weight:bold;">        </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:allowBackup=</span><span style="color:#008000;font-weight:bold;">"true"
</span><span style="color:#008000;font-weight:bold;">        </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:icon=</span><span style="color:#008000;font-weight:bold;">"@drawable/icon_gsshop_mobile"
</span><span style="color:#008000;font-weight:bold;">        </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:label=</span><span style="color:#008000;font-weight:bold;">"@string/app_name"
</span><span style="color:#008000;font-weight:bold;">        </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:supportsRtl=</span><span style="color:#008000;font-weight:bold;">"true"
</span><span style="color:#008000;font-weight:bold;">        </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:theme=</span><span style="color:#008000;font-weight:bold;">"@style/AppTheme"
</span><span style="color:#008000;font-weight:bold;">        </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:hardwareAccelerated=</span><span style="color:#008000;font-weight:bold;">"true"</span>>
        <<span style="color:#000080;font-weight:bold;">activity </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:name=</span><span style="color:#008000;font-weight:bold;">".MainActivity"
</span><span style="color:#008000;font-weight:bold;">            </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:screenOrientation=</span><span style="color:#008000;font-weight:bold;">"portrait"</span>>
            <<span style="color:#000080;font-weight:bold;">intent-filter</span>>
                <<span style="color:#000080;font-weight:bold;">action </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:name=</span><span style="color:#008000;font-weight:bold;">"android.intent.action.MAIN" </span>/>

                <<span style="color:#000080;font-weight:bold;">category </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:name=</span><span style="color:#008000;font-weight:bold;">"android.intent.category.LAUNCHER" </span>/>
            </<span style="color:#000080;font-weight:bold;">intent-filter</span>>
        </<span style="color:#000080;font-weight:bold;">activity</span>>
        <<span style="color:#000080;font-weight:bold;">activity </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:name=</span><span style="color:#008000;font-weight:bold;">".SplashActivity"
</span><span style="color:#008000;font-weight:bold;">            </span><span style="color:#660e7a;font-weight:bold;">android</span><span style="color:#0000ff;font-weight:bold;">:screenOrientation=</span><span style="color:#008000;font-weight:bold;">"portrait"
</span><span style="color:#008000;font-weight:bold;">            </span>/>
    </<span style="color:#000080;font-weight:bold;">application</span>>

</<span style="color:#000080;font-weight:bold;">manifest</span>>
</pre><p><span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255);">

 

 

 

MainActivity.java 부분

</p><pre style="background-color: rgb(255, 255, 255); font-family: 굴림체; font-size: 9.6pt;"><span style="color:#000080;font-weight:bold;">package </span>com.mobile3cm.alex.webview;

<span style="color:#000080;font-weight:bold;">import </span>android.app.Activity;
<span style="color:#000080;font-weight:bold;">import </span>android.app.ProgressDialog;
<span style="color:#000080;font-weight:bold;">import </span>android.content.Intent;
<span style="color:#000080;font-weight:bold;">import </span>android.net.Uri;
<span style="color:#000080;font-weight:bold;">import </span>android.os.Build;
<span style="color:#000080;font-weight:bold;">import </span>android.os.Message;
<span style="color:#000080;font-weight:bold;">import </span>android.support.v7.app.AppCompatActivity;
<span style="color:#000080;font-weight:bold;">import </span>android.os.Bundle;
<span style="color:#000080;font-weight:bold;">import </span>android.util.Log;
<span style="color:#000080;font-weight:bold;">import </span>android.view.KeyEvent;
<span style="color:#000080;font-weight:bold;">import </span><span style="color:#808000;">android.webkit.JavascriptInterface</span>;
<span style="color:#000080;font-weight:bold;">import </span>android.webkit.ValueCallback;
<span style="color:#000080;font-weight:bold;">import </span>android.webkit.WebChromeClient;
<span style="color:#000080;font-weight:bold;">import </span>android.webkit.WebSettings;
<span style="color:#000080;font-weight:bold;">import </span>android.webkit.WebView;
<span style="color:#000080;font-weight:bold;">import </span>android.webkit.WebViewClient;
<span style="color:#000080;font-weight:bold;">import </span>android.widget.Toast;

<span style="color:#000080;font-weight:bold;">import </span>java.net.URL;

<span style="color:#000080;font-weight:bold;">public class </span>MainActivity <span style="color:#000080;font-weight:bold;">extends </span>Activity {
    WebView <span style="color:#660e7a;font-weight:bold;">webView</span>;
    URL <span style="color:#660e7a;font-weight:bold;">uri</span>;
    <span style="color:#000080;font-weight:bold;">private </span>ValueCallback<Uri> <span style="color:#660e7a;font-weight:bold;">filePathCallbackNormal</span>;
    <span style="color:#000080;font-weight:bold;">private </span>ValueCallback<Uri[]> <span style="color:#660e7a;font-weight:bold;">filePathCallbackLollipop</span>;
    <span style="color:#000080;font-weight:bold;">private final static int </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">FILECHOOSER_NORMAL_REQ_CODE </span>= <span style="color:#0000ff;">1</span>;
    <span style="color:#000080;font-weight:bold;">private final static int </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">FILECHOOSER_LOLLIPOP_REQ_CODE </span>= <span style="color:#0000ff;">2</span>;

    <span style="color:#808000;">@Override
</span><span style="color:#808000;">    </span><span style="color:#000080;font-weight:bold;">protected void </span>onCreate(Bundle savedInstanceState) {
        <span style="color:#000080;font-weight:bold;">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.<span style="color:#660e7a;font-weight:bold;font-style:italic;">activity_main</span>);

        startActivity(<span style="color:#000080;font-weight:bold;">new </span>Intent(MainActivity.<span style="color:#000080;font-weight:bold;">this</span>, SplashActivity.<span style="color:#000080;font-weight:bold;">class</span>));

        <span style="color:#660e7a;font-weight:bold;">webView </span>= (WebView) findViewById(R.id.<span style="color:#660e7a;font-weight:bold;font-style:italic;">wv_mainWebview</span>);
        String url = <span style="color:#008000;font-weight:bold;">"<a href="http://jmoney119.cafe24.com" target="_blank" rel="noopener noreferrer">http://jmoney119.cafe24.com</a>"</span>;
        <span style="color:#000080;font-weight:bold;">try </span>{
            <span style="color:#660e7a;font-weight:bold;">uri </span>= <span style="color:#000080;font-weight:bold;">new </span>URL(url);
            <span style="color:#660e7a;font-weight:bold;">webView</span>.setWebChromeClient(<span style="color:#000080;font-weight:bold;">new </span>WebChromeClient() {
                <span style="color:#808080;font-style:italic;">// For Android < 3.0
</span><span style="color:#808080;font-style:italic;">                </span><span style="color:#000080;font-weight:bold;">public void </span>openFileChooser(ValueCallback<Uri> uploadMsg) {
                    Log.<span style="font-style:italic;">d</span>(<span style="color:#008000;font-weight:bold;">"MainActivity"</span>, <span style="color:#008000;font-weight:bold;">"3.0 <"</span>);
                    openFileChooser(uploadMsg, <span style="color:#008000;font-weight:bold;">""</span>);
                }

                <span style="color:#808080;font-style:italic;">// For Android 3.0+
</span><span style="color:#808080;font-style:italic;">                </span><span style="color:#000080;font-weight:bold;">public void </span>openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
                    Log.<span style="font-style:italic;">d</span>(<span style="color:#008000;font-weight:bold;">"MainActivity"</span>, <span style="color:#008000;font-weight:bold;">"3.0+"</span>);
                    <span style="color:#660e7a;font-weight:bold;">filePathCallbackNormal </span>= uploadMsg;
                    Intent i = <span style="color:#000080;font-weight:bold;">new </span>Intent(Intent.<span style="color:#660e7a;font-weight:bold;font-style:italic;">ACTION_GET_CONTENT</span>);
                    i.addCategory(Intent.<span style="color:#660e7a;font-weight:bold;font-style:italic;">CATEGORY_OPENABLE</span>);
                    i.setType(<span style="color:#008000;font-weight:bold;">"image/*"</span>);
                    startActivityForResult(Intent.<span style="font-style:italic;">createChooser</span>(i, <span style="color:#008000;font-weight:bold;">"File Chooser"</span>), <span style="color:#660e7a;font-weight:bold;font-style:italic;">FILECHOOSER_NORMAL_REQ_CODE</span>);
                }

                <span style="color:#808080;font-style:italic;">// For Android 4.1+
</span><span style="color:#808080;font-style:italic;">                </span><span style="color:#000080;font-weight:bold;">public void </span>openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
                    Log.<span style="font-style:italic;">d</span>(<span style="color:#008000;font-weight:bold;">"MainActivity"</span>, <span style="color:#008000;font-weight:bold;">"4.1+"</span>);
                    openFileChooser(uploadMsg, acceptType);
                }

                <span style="color:#808080;font-style:italic;">// For Android 5.0+
</span><span style="color:#808080;font-style:italic;">                </span><span style="color:#000080;font-weight:bold;">public boolean </span>onShowFileChooser(
                        WebView webView, ValueCallback<Uri[]> filePathCallback,
                        WebChromeClient.FileChooserParams fileChooserParams) {
                    Log.<span style="font-style:italic;">d</span>(<span style="color:#008000;font-weight:bold;">"MainActivity"</span>, <span style="color:#008000;font-weight:bold;">"5.0+"</span>);
                    <span style="color:#000080;font-weight:bold;">if </span>(<span style="color:#660e7a;font-weight:bold;">filePathCallbackLollipop </span>!= <span style="color:#000080;font-weight:bold;">null</span>) {
                        <span style="color:#660e7a;font-weight:bold;">filePathCallbackLollipop</span>.onReceiveValue(<span style="color:#000080;font-weight:bold;">null</span>);
                        <span style="color:#660e7a;font-weight:bold;">filePathCallbackLollipop </span>= <span style="color:#000080;font-weight:bold;">null</span>;
                    }
                    <span style="color:#660e7a;font-weight:bold;">filePathCallbackLollipop </span>= filePathCallback;
                    Intent i = <span style="color:#000080;font-weight:bold;">new </span>Intent(Intent.<span style="color:#660e7a;font-weight:bold;font-style:italic;">ACTION_GET_CONTENT</span>);
                    i.addCategory(Intent.<span style="color:#660e7a;font-weight:bold;font-style:italic;">CATEGORY_OPENABLE</span>);
                    i.setType(<span style="color:#008000;font-weight:bold;">"image/*"</span>);
                    startActivityForResult(Intent.<span style="font-style:italic;">createChooser</span>(i, <span style="color:#008000;font-weight:bold;">"File Chooser"</span>), <span style="color:#660e7a;font-weight:bold;font-style:italic;">FILECHOOSER_LOLLIPOP_REQ_CODE</span>);

                    <span style="color:#000080;font-weight:bold;">return true</span>;
                }

                <span style="color:#808000;">@Override
</span><span style="color:#808000;">                </span><span style="color:#000080;font-weight:bold;">public boolean </span>onCreateWindow(WebView view, <span style="color:#000080;font-weight:bold;">boolean </span>dialog, <span style="color:#000080;font-weight:bold;">boolean </span>userGesture, Message resultMsg) {
                    <span style="color:#808080;font-style:italic;">// return true or false after performing the URL request
</span><span style="color:#808080;font-style:italic;">                    </span>WebView newWebView = <span style="color:#000080;font-weight:bold;">new </span>WebView(MainActivity.<span style="color:#000080;font-weight:bold;">this</span>);
                    view.addView(newWebView);
                    WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.<span style="color:#660e7a;font-weight:bold;">obj</span>;
                    transport.setWebView(newWebView);
                    resultMsg.sendToTarget();

                    newWebView.setWebViewClient(<span style="color:#000080;font-weight:bold;">new </span>WebViewClient() {
                        <span style="color:#808000;">@Override
</span><span style="color:#808000;">                        </span><span style="color:#000080;font-weight:bold;">public boolean </span>shouldOverrideUrlLoading(WebView view, String url) {
                            Intent browserIntent = <span style="color:#000080;font-weight:bold;">new </span>Intent(Intent.<span style="color:#660e7a;font-weight:bold;font-style:italic;">ACTION_VIEW</span>);
                            browserIntent.setData(Uri.<span style="font-style:italic;">parse</span>(url));
                            startActivity(browserIntent);
                            <span style="color:#000080;font-weight:bold;">return true</span>;
                        }
                    });
                    <span style="color:#000080;font-weight:bold;">return true</span>;
                }

            });

            <span style="color:#660e7a;font-weight:bold;">webView</span>.setWebViewClient(<span style="color:#000080;font-weight:bold;">new </span>WebViewClient() {
                <span style="color:#808000;">@Override
</span><span style="color:#808000;">                </span><span style="color:#000080;font-weight:bold;">public boolean </span>shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    <span style="color:#000080;font-weight:bold;">return false</span>;
                }
            });

            WebSettings webSettings = <span style="color:#660e7a;font-weight:bold;">webView</span>.getSettings();
            webSettings.setJavaScriptEnabled(<span style="color:#000080;font-weight:bold;">true</span>);
            <span style="color:#660e7a;font-weight:bold;">webView</span>.loadUrl(url);

        }<span style="color:#000080;font-weight:bold;">catch </span>(Exception e){

        }
    }

    <span style="color:#000080;font-weight:bold;">public boolean </span>shouldOverrideUrlLoading(WebView view, String url) {
        <span style="color:#000080;font-weight:bold;">if</span>(url.startsWith(<span style="color:#008000;font-weight:bold;">"tel:010-1111-5570"</span>)){
            Intent dial = <span style="color:#000080;font-weight:bold;">new </span>Intent(Intent.<span style="color:#660e7a;font-weight:bold;font-style:italic;">ACTION_VIEW</span>, Uri.<span style="font-style:italic;">parse</span>(url));
            <span style="color:#808080;font-style:italic;">//현재의 activity 에 대하여 startActivity 호출
</span><span style="color:#808080;font-style:italic;">            </span>startActivity(dial);
            <span style="color:#000080;font-weight:bold;">return true</span>;
        }
        view.loadUrl(url);
        <span style="color:#000080;font-weight:bold;">return true</span>;
    }

    <span style="color:#808000;">@Override
</span><span style="color:#808000;">    </span><span style="color:#000080;font-weight:bold;">public boolean </span>onKeyDown(<span style="color:#000080;font-weight:bold;">int </span>keyCode, KeyEvent event) {
        <span style="color:#000080;font-weight:bold;">if</span>((keyCode == KeyEvent.<span style="color:#660e7a;font-weight:bold;font-style:italic;">KEYCODE_BACK</span>) && <span style="color:#660e7a;font-weight:bold;">webView</span>.canGoBack()) {
            <span style="color:#660e7a;font-weight:bold;">webView</span>.goBack();
            <span style="color:#000080;font-weight:bold;">return true</span>;
        }
        <span style="color:#000080;font-weight:bold;">return super</span>.onKeyDown(keyCode, event);
    }

    <span style="color:#000080;font-weight:bold;">protected void </span>onActivityResult(<span style="color:#000080;font-weight:bold;">int </span>requestCode, <span style="color:#000080;font-weight:bold;">int </span>resultCode, Intent data) {
        <span style="color:#000080;font-weight:bold;">if </span>(requestCode == <span style="color:#660e7a;font-weight:bold;font-style:italic;">FILECHOOSER_NORMAL_REQ_CODE</span>) {
            <span style="color:#000080;font-weight:bold;">if </span>(<span style="color:#660e7a;font-weight:bold;">filePathCallbackNormal </span>== <span style="color:#000080;font-weight:bold;">null</span>) <span style="color:#000080;font-weight:bold;">return </span>;
            Uri result = (data == <span style="color:#000080;font-weight:bold;">null </span>|| resultCode != <span style="color:#660e7a;font-weight:bold;font-style:italic;">RESULT_OK</span>) ? <span style="color:#000080;font-weight:bold;">null </span>: data.getData();
            <span style="color:#660e7a;font-weight:bold;">filePathCallbackNormal</span>.onReceiveValue(result);
            <span style="color:#660e7a;font-weight:bold;">filePathCallbackNormal </span>= <span style="color:#000080;font-weight:bold;">null</span>;
        } <span style="color:#000080;font-weight:bold;">else if </span>(requestCode == <span style="color:#660e7a;font-weight:bold;font-style:italic;">FILECHOOSER_LOLLIPOP_REQ_CODE</span>) {
            <span style="color:#000080;font-weight:bold;">if </span>(<span style="color:#660e7a;font-weight:bold;">filePathCallbackLollipop </span>== <span style="color:#000080;font-weight:bold;">null</span>) <span style="color:#000080;font-weight:bold;">return </span>;
            <span style="color:#660e7a;font-weight:bold;">filePathCallbackLollipop</span>.onReceiveValue(WebChromeClient.FileChooserParams.<span style="font-style:italic;">parseResult</span>(resultCode, data));
            <span style="color:#660e7a;font-weight:bold;">filePathCallbackLollipop </span>= <span style="color:#000080;font-weight:bold;">null</span>;
        }
    }
}

</pre><pre style="background-color: rgb(255, 255, 255); font-family: 굴림체; font-size: 9.6pt;">
댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트

https://www.google.co.kr/#newwindow=1&q=%EC%9B%B9%EB%B7%B0+tel+%EC%B2%98%EB%A6%AC&spf=1496221218796">https://www.google.co.kr/#newwindow=1&q=%EC%9B%B9%EB%B7%B0+tel+%EC%B2%98%EB%A6%AC&spf=1496221218796 

 

안드로이드 웹뷰의 경우 tel, sms 이런 기능들은 별도 처리를 해주셔야 됩니다.

 

검색하면 많은 소스가 나오니 맞는 소스를 선택하셔서 적용하시면 될거 같습니다. 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인

전체 질문 목록

🐛 버그신고