raw 데이터
- raw 데이터는 가공되지 않은 원천 데이터를 의미한다.
- 사운드나 동영상, 사진 등을 데이터의 용량을 줄이기 위해 압축을 하게 되는데 이러한 가공을 거치지 않은 순수 데이터 들을 raw 데이터라고 부른다.
- 안드로이드에서는 각종 데이터 파일이나 동영상, 사운드 등의 데이터를 사용할 때 주로 사용한다.
raw 폴더
- 실행 중 다운받거나 생성된 데이터 파일은 내부 저장소나 외부저장소에 저장해 두었다가 필요할 때 읽어오면 된다.
- 만약 데이터가 저장된 파일을 애플리케이션 내부에 포함 시키겠다면 raw 폴더에 저장하면 된다.
- raw 폴더에 저장된 파일은 스트림을 손쉽게 추출할 수 있다.
사운드 파일 재생하기
- raw 폴더에 들어 있는 사운드 파일 재생은 매우 쉽다.
동영상 파일 재생하기
- 동영상 재생을 위해서는 VideoView라는 View를 사용한다.
- VideoView는 재생할 영상이 있는 파일의 경로를 직접 설정해줘야 한다.
1. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="텍스트 파일 읽어오기" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="사운드 재생하기" />
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="사운드 중지하기" />
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="영상 재생하기" />
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="영상 중지하기" />
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
2. MainActivity
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
// 사운드 재생 관리 객체
var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.run {
button.setOnClickListener {
// raw 폴더에 있는 파일과 연결된 스트림을 추출한다.
val inputStream = resources.openRawResource(R.raw.data)
val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
val bufferedReader = BufferedReader(inputStreamReader)
var str: String? = null
val stringBuffer = StringBuffer()
do {
str = bufferedReader.readLine()
if(str != null){
stringBuffer.append("${str}\n")
}
}while(str != null)
bufferedReader.close()
textView.text = stringBuffer.toString()
}
button2.setOnClickListener{
if(mediaPlayer == null){
// 사운드 재생 관리 객체를 생성한다.
mediaPlayer = MediaPlayer.create(this@MainActivity, R.raw.song)
// 재생한다.
mediaPlayer?.start()
}
}
button3.setOnClickListener {
if(mediaPlayer != null){
// 사운드를 중지시킨다.
mediaPlayer?.stop()
mediaPlayer = null
}
}
button4.setOnClickListener {
// ViewView가 재생중이 아니라면
if(videoView.isPlaying == false){
// 영상 파일의 경로를 가져온다.
val uri = Uri.parse("android.resource://${packageName}/raw/video")
// 영상 주소를 설정한다.
videoView.setVideoURI(uri)
// 재생한다.
videoView.start()
}
}
button5.setOnClickListener {
// ViewView가 재생 중이라면
if(videoView.isPlaying == true){
// 영상 재생을 중지한다.
videoView.stopPlayback()
}
}
}
}
}
val inputStream = resources.openRawResource(R.raw.data)
val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
val bufferedReader = BufferedReader(inputStreamReader)
- val inputStream = resources.openRawResource(R.raw.data)
- resources.openRawResource() 메서드는 raw 폴더에 있는 파일과 연결된 스트림을 추출합니다.
- R.raw.data는 raw 폴더에 있는 data 파일을 가리키는 리소스 식별자입니다.
- 이 코드를 통해 raw 폴더의 data 파일에 접근하는 inputStream을 얻을 수 있습니다.
- val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
- inputStream을 UTF-8 문자 인코딩으로 읽을 수 있는 InputStreamReader로 변환합니다.
- val bufferedReader = BufferedReader(inputStreamReader)
- InputStreamReader를 BufferedReader로 감싸서 한 줄씩 데이터를 읽을 수 있도록 합니다.
[결과]
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님
'안드로이드 앱 스쿨 2기 > Android' 카테고리의 다른 글
[11주차 - 수] SQLIteDataBase (0) | 2023.07.06 |
---|---|
[11주차 - 수] Assets (0) | 2023.07.05 |
[11주차 - 화] FileStream (0) | 2023.07.04 |
[11주차 - 화] Application Class (0) | 2023.07.04 |
[11주차 - 월] CodeView (0) | 2023.07.03 |