마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

완전 초보 ㅠㅠ 웹뷰에서 a링크전화걸기좀 제발좀도와주세요 ㅠㅠ

0 추천

manifest 에서

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

이건추가를했는데요...

Blog.java에서..

여기서 멀넣어야될것같은데.. 검색해보니 tel 에 대한 인터넷값에서 인지를 시키는것까지는 이해를 했는데..이건..어떻게 멀넣어야될지..넣으면 빨간색 뜨고

ㅠㅠ 아 고수님들 도와주세요 ㅠㅠ

=========================================================

package dmman.blog;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class Blog extends Activity {
 
 WebView mWebView;
 
 
    @SuppressLint("SetJavaScriptEnabled") @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        startActivity(new Intent(this, SplashActivity.class));
       
        mWebView.setWebChromeClient(new WebChromeClient());
        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.loadUrl(http://test.com/test.asp);
        mWebView.setWebViewClient(new BlogWebViewClient());  
       
       
       
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.blog, menu);
        return true;
    }
   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
     
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()){
      
      mWebView.goBack();
      return true;
     }
     return super.onKeyDown(keyCode, event);
    }
   
    private class BlogWebViewClient extends WebViewClient {
     
     @Override
     public boolean shouldOverrideUrlLoading(WebView view, String url){
      view.loadUrl(url);
      return true;
     }
     
    }
   
}

 

 

 

misonykhj (120 포인트) 님이 2014년 1월 6일 질문

2개의 답변

0 추천

그냥 html 에서

<a href="tel:010-000-000">번호</a>

하세요

aucd29 (218,390 포인트) 님이 2014년 1월 6일 답변
네 당연히 페이지에서는 그렇게 처리해놨습니다.
그런데 검색을 해보니 웹뷰같은경우 거기에 관해서 추가 이벤트를 넣어야되는것같더라구요 ㅠㅠ
http://stackoverflow.com/questions/20578719/webview-mailto-link-tel-link-work-using-intent-action-view-but-how-do-i

@Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if( url.startsWith("http:") || url.startsWith("https:") ) {
                return false;
            }

            // Otherwise allow the OS to handle it
            else if (url.startsWith("tel:")) {
                Intent tel = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
                startActivity(tel);
                return true;
            }
            else if (url.startsWith("mailto:")) {
                String body = "Enter your Question, Enquiry or Feedback below:\n\n";
                Intent mail = new Intent(Intent.ACTION_SEND);
                mail.setType("application/octet-stream");
                mail.putExtra(Intent.EXTRA_EMAIL, new String[]{"email address"});
                mail.putExtra(Intent.EXTRA_SUBJECT, "Subject");
                mail.putExtra(Intent.EXTRA_TEXT, body);
                startActivity(mail);
                return true;
                }
            return true;
        }
shouldOverrideUrlLoading(WebView view, String url) {
이줄전체가 빨간색줄이쳐지네요 ㅠㅠ
0 추천

private class BlogWebViewClient extends WebViewClient {
     
     @Override
     public boolean shouldOverrideUrlLoading(WebView view, String url){
      view.loadUrl(url);
      return true;
     }
     
    }

 

여기까지는 잘하셨네요.

shouldOverrideUrlLoading 메소드에서

직접 구현하셔야 합니다.

if(url.startsWith("tel:")) {

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:010-1234-5678"););
//전화거는 화면까지만 이동 시킬꺼면 Intent.ACTION_DIAL
startActivity(intent);

}

 

굳이 직접 전확 걸기가 필요없다면 Url scheme를 이용해서 처리해도 됩니다.

if(!url.startsWith("http")) {

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url););
startActivity(intent);

}

원조안드로이드 (58,190 포인트) 님이 2014년 1월 6일 답변
네네 전화거는버튼화면까지는 멋지게 갔습니다!!!!
그래서 신나서 뒤로 다시 웹뷰화면으로 돌리니-_-;;;;
첨에 <a href="tel:000-00-00 첨에 에러 화면이 나오네요;;
그전화면이나와야되는데...


package dmman.blog;

import android.net.Uri;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class Blog extends Activity {
   
    WebView mWebView;
   
   
    @SuppressLint("SetJavaScriptEnabled") @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        startActivity(new Intent(this, SplashActivity.class));
        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.setWebChromeClient(new WebChromeClient());
        mWebView.setWebViewClient(new WebViewClient());
        mWebView.loadUrl("http://test.com/test.html");
        mWebView.setWebViewClient(new BlogWebViewClient());       
        
    }

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if( url.startsWith("http:") || url.startsWith("https:") ) {
            return false;
        }

        // Otherwise allow the OS to handle it
        else if (url.startsWith("tel:")) {
            Intent tel = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
            startActivity(tel);
            return true;
        }
        else if (url.startsWith("mailto:")) {
            String body = "Enter your Question, Enquiry or Feedback below:\n\n";
            Intent mail = new Intent(Intent.ACTION_SEND);
            mail.setType("application/octet-stream");
            mail.putExtra(Intent.EXTRA_EMAIL, new String[]{"email address"});
            mail.putExtra(Intent.EXTRA_SUBJECT, "Subject");
            mail.putExtra(Intent.EXTRA_TEXT, body);
            startActivity(mail);
            return true;
            }
        return true;
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.blog, menu);
        return true;
    }
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
       
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()){
           
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
    private class BlogWebViewClient extends WebViewClient {
       
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url){
           
           
            if(!url.startsWith("http")) {

                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);

                }
            view.loadUrl(url);
            return true;
           
        }
       
    }
    
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
뒤에 return false; 를 해보세요
...