\ [Java][Android]webview에서 파일 업로드 :: Something New
728x90
반응형

안드로이드는 업데이트가 잦아서 무슨 기능을 검색해서 쓰려고하면

버전이 안맞아서 검색의 무한루프에 빠져버린다

제가 하고 있는 건 웹은 작동하고 있는 환경에서

추가로 어플을 만드는 하이브리드 어플을 만들고 있는 상황입니다.

최신 코드라고 해도 startactivityforresult deprecated되어서 가져다 쓸 수 없었으므로,,

일단 manefest에서 커미션은 허용했다는 전제하에

public class MyWebChromeClient extends WebChromeClient  안에 넣어 주면 됩니다.

  @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {

            //파일 업로드 
            if (mFilePathCallback != null) {
                //파일을 한번 열면 초기화 시킬것 안하면 두번째는 반응이 없음
                mFilePathCallback.onReceiveValue(null);
            }
            mFilePathCallback = filePathCallback;

			//WEBVIEW에서 파일을 선택하는 INTENT 작동
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("*/*");  
            
            //이부분이 startactivityforresult을 쓴 사람들이 많았음 deprecated된 부분
            startActivityIntent.launch(intent);
            
            return true;
        }

startactivityforresult deprecated 대체를 검색해서 맞춰서 만든 코드

        ActivityResultLauncher<Intent> startActivityIntent = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                new ActivityResultCallback<ActivityResult>() {
                    @Override
                    public void onActivityResult(ActivityResult result) {
                        if(result.getResultCode() == RESULT_OK) {
                            //파일 선택완료
                            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                                mFilePathCallback.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(result.getResultCode(), result.getData()));
                            }else{
                                mFilePathCallback.onReceiveValue(new Uri[]{result.getData().getData()});
                            }
                            mFilePathCallback = null;
                        } else {
                            //취소했을 경우
                            if(mFilePathCallback != null) {
                                mFilePathCallback.onReceiveValue(null);
                                mFilePathCallback = null;
                            }
                        }
                    }
                });

포켓몬 카페 갔을 때 찍은 피카츄

 

 

728x90

+ Recent posts