그누보드5에서 하이브리드 앱을 만들었는데 안드로이드 스튜디오 webview에서 첨부파일이 안눌립니다... ㅠㅠ


안드로이드 스튜디오는 API 16: Android 4.1 (jelly Bean)

사용하고 있습니다.

웹뷰에서 크롬 클라이언트를 사용하라고 하시는데 아무리 해도 ... 어렵고

혹 성공했지만 카메라나 이런 기능들은 사용이 안되고 있습니다.

1주일동안 알아봤는데 너무 힘듭니다.

여기 계신분들은 답변을 너무 쉽게 설명 해주셔서 정말 좋은 것 같습니다^

혹시 짜두신 코딩이나 하시는 방법을 아시면 조금 알려주시면 정말 감사드리겠습니다.

  • 2016년 07월 22일에 작성됨
    웹/앱 개발자 초보입니다.

조회수 421


4 답변


좋아요
2
싫어요
채택취소하기

웹뷰에서 파일 첨부 버튼이 동작하지 않는 이유는 관련 구현을 하지 않았기 때문입니다. WebChromeClient를 사용해서 구현해야하는 것이 맞습니다. 아래 링크들을 참고해보세요.

안드로이드 웹뷰에서 파일 첨부 처리가 OS 버전별 분기를 해야하는 번거로움이 존재하지만 불가능한 것은 아닙니다. 이미 많은 앱에서 처리되고 있고, 자료도 많은 편입니다. 하나씩 차근차근 따라해보시길 추천드리고요. 해시코드에 비슷한 질문이 있어서 링크 남겼습니다.


  • 진짜 진짜 감사합니다 ^^    코딩초보자   2016.7.22 17:00     

public void openFileChooser();

위 함수는 웹에서 <input type="file" />을 클릭했을 때 호출되는 함수입니다. 올려주신 코드에서는 이미지 파일을 선택할 수 있는 액티비티를 startActivityForResult() 함수를 이용해서 실행하는 부분입니다. 즉, 파일 다이얼로그를 띄우는 부분이라고 이해하면 쉬울 것 같습니다.

protected void onActivityResult();

위 함수는 startActivityForResult()로 실행된 액티비티의 결과 값을 받는 함수입니다. 파일 다이얼로그를 실행했으니 사용자가 이미지를 선택하면 그 이미지의 Uri를 전달받는 함수라고 이해하면 될 것 같고요. 올려주신 코드에서는 사용자가 선택한 Uri(이미지 파일 경로)를 웹뷰로 전달하는 처리를 합니다.

다음 링크에서 결과에 대한 액티비티 시작하기 부분을 꼭 읽어보세요.



protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //startActivityForResult 로 호출한 액티비티가 종료되었을 때 호출 됨!

    if (requestCode == FILECHOOSER_NORMAL_REQ_CODE) {
        if (filePathCallbackNormal == null) return ;
        Uri result = (data == null || resultCode != RESULT_OK) ? null : data.getData();
        filePathCallbackNormal.onReceiveValue(result);
        filePathCallbackNormal = null;
    } else if (requestCode == FILECHOOSER_LOLLIPOP_REQ_CODE) {
        if (filePathCallbackLollipop == null) return ;
        filePathCallbackLollipop.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
        filePathCallbackLollipop = null;
    }
}

보내주신 내용중에 여기 코드에서요 ...
여기 부분만 이해가 안되거든요? 다 이해는 되는데 .. 이것좀 도움 주시면 안될까용?ㅠㅠ 정말 많은 도움 받고 있습니다. 감사합니다.

  • 2016년 07월 22일에 작성됨
    웹/앱 개발자 초보입니다.


public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType) {
                Log.d(TAG, "3.0+");
                filePathCallbackNormal = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*"); // vidio/* audia/*
                startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_NORMAL_REQ_CODE);}

여기도 잘 모르겠습니다.. ㅠㅠ 알려주세용 ㅠㅠ


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close