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
'Java Android' 카테고리의 다른 글
[안드로이드]webview new tab/새 창 으로 열기 (0) | 2024.03.13 |
---|---|
[안드로이드]인코딩 디코딩 URL과 base64 (0) | 2023.11.03 |
[Java][Android]어플 종료시 어플에서 다운로드한 파일/캐시파일 삭제하기 (0) | 2023.11.02 |
[Java][Android]webview 파일 다운로드한 후 파일 열기 (0) | 2023.11.01 |