환경
- M1 Mac OS Monterey 12.5.1
- Android Studio Chipmunk 2021.2.1 Patch1 (ARM)
- Gradle 7.2
- Android Build Gradle 7.1.2
- Kolin 1.7.0
개요
안드로이드 개발을 하다보면 가끔씩 assets 폴더 내부에 존재하는 파일을 가져와야 할때가 있는데
자주있는 일이 아니라서 어떤 함수들로 가져왔었지? 하고 항상 다시 찾아보곤 합니다. (ㅜ.ㅜ)
그래서 기록 겸 assets 폴더 내부의 파일을 접근해서 가져오는 방법을 포스팅하려고 합니다.
테스트용으로 아래와 같은 파일이 assets 폴더 내에 존재한다고 가정해보겠습니다.
Context.getAssets() 함수로 파일 가져오기
Context 에서는 getAssets() 라는 함수를 제공하는데
이를 이용하면 쉽게 Assets 폴더 내의 파일을 가져올 수 있습니다.
// context.getAssets() 로 가져오기
val testImgFile: InputStream = assets.open("test_img.png")
// test_img 읽어오기
val testImgContents: ByteArray = testImgFile.use {
it.readBytes()
}
getAssets() 함수를 호출하면서 파일이름을 전달하면
그 파일의 InputStream 을 반환합니다.
이를 이용해서 필요한 작업을 진행하면 됩니다.
파일의 내용을 읽어오거나, File 객체로 변환 하거나 하면 되겠죠?
WebView 에서 Assets 파일 접근하기
웹뷰에서는 가끔씩 assets 내에 존재하는 파일에 접근 할 필요가 생기는데
html 파일을 로드하는 사례에서 assets 내에 존재하는 html 파일에 접근하는 방법입니다.
아래와 같이 file scheme 를 하드코딩하여 html 파일의 경로를 webview 에 알려줍니다.
webview.loadUrl("file:///android_asset/index.html")
만약 index.html 파일의 내용을 읽어서
html string 을 웹뷰 내에 로드하려면 어떻게 해야할까요?
아래 코드 처럼 해볼 수 있습니다.
val html = assets.open("index.html")
.bufferedReader()
.use {
it.readText()
}
webview.loadData(html, "text/html; charset=utf-8", "UTF-8")
그냥 file scheme 경로를 하드코딩해서 전달하면 끝인데
굳이 이렇게 할 필요가 있나? 싶기도 하지만
아~~~주 가끔씩 기능 구현 시
API 에서 URL 이 아닌 html string 을 줬을 때
webview 에 html string 을 넣어줘야 할 때가 있습니다.
이런 사례를 assets 내부 index.html 파일에 응용한 방법이라고 할 수 있습니다 :)
이상으로 포스팅을 마치겠습니다.
감사합니다.
'Develop > Android' 카테고리의 다른 글
[Android] - Gradle Dependency 최신 버전 쉽게 확인하기 (0) | 2022.10.21 |
---|---|
[Android] - 코드로 기기 화면 켜지게 하기 (0) | 2022.10.18 |
[Android] - Android Studio Assets 폴더 만들기 (0) | 2022.09.23 |
[Android] - 구글플레이 콘솔에서 앱 서명키 정보 확인 (0) | 2022.09.16 |
[Android] Device File Explorer - Is: /storage/emulated/: permission denied (0) | 2022.09.13 |