728x90
반응형
onShowFileChooser 를 오버라이드 해주시면 되는데요!
그전에 우선 변수먼저 전역으로 잡고 갈거 선언해주고 가겠습니다.
var cameraPath = ""
var mWebViewImageUpload: ValueCallback<Array<Uri>>? = null
이렇게 선언 잡아주시고
웹뷰이름.webChromeClient = object : WebChromeClient(){
override fun onShowFileChooser(webView: WebView?, filePathCallback: ValueCallback<Array<Uri>>?, fileChooserParams: FileChooserParams?): Boolean {
try{
mWebViewImageUpload = filePathCallback!!
var takePictureIntent : Intent?
takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if(takePictureIntent.resolveActivity(packageManager) != null){
var photoFile : File?
photoFile = createImageFile()
takePictureIntent.putExtra("PhotoPath",cameraPath)
if(photoFile != null){
cameraPath = "file:${photoFile.absolutePath}"
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photoFile))
}
else takePictureIntent = null
}
val contentSelectionIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
contentSelectionIntent.type = "image/*"
var intentArray: Array<Intent?>
if(takePictureIntent != null) intentArray = arrayOf(takePictureIntent)
else intentArray = takePictureIntent?.get(0)!!
val chooserIntent = Intent(Intent.ACTION_CHOOSER)
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent)
chooserIntent.putExtra(Intent.EXTRA_TITLE,"사용할 앱을 선택해주세요.")
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray)
launcher.launch(chooserIntent)
}
catch (e : Exception){ }
return true
}
}
이 구문을 복붙해주시면 될거같은데요.
여기서 빨간줄 뜨시는분들 많으실겁니다.
이제 여기서 사용한 다른것들 셋팅해줄게요.
fun createImageFile(): File? {
@SuppressLint("SimpleDateFormat")
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
val imageFileName = "img_" + timeStamp + "_"
val storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
return File.createTempFile(imageFileName, ".jpg", storageDir)
}
우선 createImageFile 먼저 만들어 주시구요.
원래는 startActivityForResult 이용해서
onActivityResult 오버라이드 해서 받았는데요.
이번에 새롭게 등장한 registerForActivityResult를 이용해서 한번 해봤습니다.
val launcher = registerForActivityResult(StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val intent = result.data
if(intent == null){ //바로 사진을 찍어서 올리는 경우
val results = arrayOf(Uri.parse(cameraPath))
mWebViewImageUpload!!.onReceiveValue(results!!)
}
else{ //사진 앱을 통해 사진을 가져온 경우
val results = intent!!.data!!
mWebViewImageUpload!!.onReceiveValue(arrayOf(results!!))
}
}
else{ //취소 한 경우 초기화
mWebViewImageUpload!!.onReceiveValue(null)
mWebViewImageUpload = null
}
}
이렇게 해주시면 됩니다!
728x90
반응형
댓글