워드프레스 홈페이지를 웹뷰작업을 하였는데 카카오톡공유하기를누르면 intent:kakaolink:// 발생합니다

현재는 이런상태인데 어떻게 추가를 해야지 정상적으로 작동을 하게될까요

> private class myWebViewClient extends WebViewClient {
>         @Override
>         public boolean shouldOverrideUrlLoading(WebView view, String url) {
>             // 전화걸기 (퍼미션설정) Intent.ACTION_CALL , Intent.ACTION_DIAL
>             if (url.contains("tel:")) {
>                 startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(url)));
>                 return true;
>             }
>             // 메일 보내기 Intent.ACTION_SENDTO
>             else if (url.contains("mailto:")) {
>                 startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse(url)));
>                 return true;
>             }
>             // 웹 화면 띄우기
>             else {
>                 view.loadUrl(url);
>                 return true;
>             }
>         }
>     }
> }

@01021619 위에 tel, mailto 처럼 intent에 대해서도 스위칭이 되도록 웹뷰를 커스터마이징하시면 되지 않을까요?

1개의 좋아요

답변 감사드립니다. 저도 그렇게 해봤는데… 다 똑같이 하고 mailto들어가는 부분에 kakaolink: 나 storylink: 이렇게 한후 action_view로 했는데…ㅠㅠ되질않아서요
다른곳이나 또 설정을 해야하는곳이있는건지…

이것말고도 혹시 다른 방법이 있는건지 모르겠습니다.ㅠㅠㅠ

구체적인 구현 코드를 봐야 확인할 수 있을 것 같은데…

kakaolink 를 눌렀을때의 URL이 intent로 시작하고 end로 끝날거에요.
intent:#Intent;.....;end; 즉 이런 모양일텐데 여기서 intent:end는 떼고 사용해주셔야 합니다.
이 코드를 참조하시면 어떨까 싶네요.
https://devtalk.kakao.com/t/4-4/457/3?u=leon
이미 처리하신 내용인가요? 그렇다면 사용하신 코드를 첨주해주실 수 있으실까요?

2개의 좋아요

답변 정말 너무 감사드립니다. 저걸 사용하긴했었는데… 혹시 한번 봐주실수있으신가요?

mainactivity.java 파일의 소스는

package com.sangsangbizon.sangsangtour;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.DownloadListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {
    WebView myWebView;

    @Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myWebView = (WebView) findViewById(R.id.webView1);
        myWebView.getSettings().setJavaScriptEnabled(true); // 자바스크립트를 사용할 수 있도록 해줍니다.
        myWebView.loadUrl("http://www.sangsangbiz.com");     // 이곳에 URL (http://abc/abc.html) 을 넣어 합니다.
        // file:///abc/abc.html 처럼 사용할 수 있습니다.
        myWebView.setWebViewClient(new myWebViewClient());
        // 다운 로드 할 수 있도록 해주는 함수 ==================================
        myWebView.setDownloadListener(new DownloadListener() {
            public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                // 다운로드 파일 웹 브라우저 사용
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setType(mimetype);
                intent.setData(Uri.parse(url));
                startActivity(intent);
            }
        });
    }
    // 디바이스 기기의 back 버튼 인식 ===========================================
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()){
            myWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    // 웹 뷰 내부의 URL 인식
    private class myWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // 전화걸기 (퍼미션설정) Intent.ACTION_CALL , Intent.ACTION_DIAL
            if (url.contains("tel:")) {
                startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(url)));
                return true;
            }
            // 메일 보내기 Intent.ACTION_SENDTO
            else if (url.contains("mailto:")) {
                startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse(url)));
                return true;
            }
            // 웹 화면 띄우기
            else {
                view.loadUrl(url);
                return true;
            }
        }
    }
}

androidmanifest.xml의 코드는

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sangsangbizon.sangsangtour">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="상상여행사"
        android:theme="@android:style/Theme.NoTitleBar"
        >
        <activity
            android:name=".MainActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|orientation|screenSize"
            android:label="상상여행사" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

입니다. 답변주신 내용은 제가 적용을 했었는데 제가 이쪽을 배운것이 아니고 인터넷검색을 통해서 하다보니 getContext()의 처리가 붉은색으로 뜨는데 어떻게 처리를 해야할지몰라 못했던것으로 기억합니다.
혹시 가능하시다면 답변을 주시면 감사드리겠습니다…ㅠ

위에 첨부해드린 코드에서 getContext() 빼고 테스트해보세요. 잘 되어야 할 것 같은데요~

다시한번 답변 감사드립니다. 말씀하신대로 getContext()를 빼고 ActivityNotFoundException는 import class로 해서 작업을 했는데요 그 전과같은 intent:kakaolink://send 라는 오류는 나오지않지만

이번에는 서버에서 정보를 가져오는 중에 오류가 발생했습니다[DF-DIC-02]라고 나오는데 작성한 코드가 아닌 다른쪽에서 잘못을 한것인걸까요…

코드와 환경정보(안드 버전등등) 없이 도움을 더 드리기가 힘드네요ㅜ

네…그래도 너무 감사드립니다.ㅠㅠㅠㅠㅠ