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

웹뷰에서 JavascriptInterface를 통해 Activity 메소드에 접근하고 싶습니다!!

0 추천

안드로이드 개발 시작한지 얼마되지않은 초짜개발자입니다..

 

public class WebViewInterface {
    private WebView mWebView;
    private Activity mContext;

    public WebViewInterface(Activity activity, WebView view) {
        mWebView = view;
        mContext = activity;
    }
    @JavascriptInterface
    public void actionSomething() {
        Log.d("JavascriptInterface", "actionSomething");
    }
}

WebViewInterface.java입니다.

 

WebViewInterface mWebViewInterface = new WebViewInterface(MainActivity.this, mWebView);
mWebView.addJavascriptInterface(mWebViewInterface, "android");

MainActivity에서 WebViewInterface를 다음과 같이 선언해주었습니다.

 

웹에서 JavascriptInterface로 선언된 actionSomething() 메소드로 호출은 성공하여 로그가 찍히는 것까지는 확인을 했는데

MainActivity에 something() 이라는 메소드를 호출하려면 어떤 방식으로 접근해야하는지 궁금합니다.

 

MainActivity mActivity;
mActivity = (MainActivity) mContext.getApplicationContext();
mActivity.something();

구글링을 하다보니 위와같이 접근해서 쓰면 된다고 하는데

W/System.err: java.lang.ClassCastException: android.app.Application cannot be cast to .MainActivity
        at kr.wbsi.wbs_service.WebViewInterface.actionSomething(WebViewInterface.java:43)
        at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
        at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:41)

 

처럼 에러가 발생합니다.

 

고수님들의 조언 부탁드립니다!!

[안드로보이] (240 포인트) 님이 2019년 4월 16일 질문

1개의 답변

0 추천
WebviewInterface class를 MainActivity의 내부클래스로 선언해서 사용하시면 되죠
익명사용자 님이 2019년 4월 16일 답변
조언주셔서 감사합니다!

그런데 혹시 class 선언 시 파라미터로 받은 context로 연결해서 사용할 방법은 없는건가요??
...